《剑指 Offer 》—58 - I. 翻转单词顺序
注意:本题与151 题相同:https://leetcode-cn.com/problems/reverse-words-in-a-string/
注意:此题对比原题有改动
文章目录
- 《剑指 Offer 》—58 - I. 翻转单词顺序
- 一、题目内容
- 二、个人答案(Java)
- 三、官方答案(Java)
一、题目内容
原题连接:https://leetcode.cn/problems/fan-zhuan-dan-ci-shun-xu-lcof/description/
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
注:
二、个人答案(Java)
思路:先在字符串最后加一个空格(),再定义一个字符串string,然后用toCharArray方法把该字符串转换为char型数组,定义ab两个int型变量来作为后面“裁剪”字符串的角标,这时候for循环整个数组,if来判断不为空格的元素,判断出一个不为空格的元素则把该元素角标作为a,然后在if语句里面继续循环,但是从刚才a后面的一个元素开始,if语句来判断,遇见了空格就进行“裁剪”,用substring方法把a到b的字符串接在前面定义的新字符串string的后面,让后让外循环的i变成此时的b,break结束内循环,再次进行外循环,以此类推,最后得到新的字符串就是符合题目的字符串,但是这时候,最后肯定是存在一个空格的,用trim方法去除首位空格即可(详情见代码)
代码:
/*
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。
为简单起见,标点符号和普通字母一样处理。
例如输入字符串"I am a student. ",则输出"student. a am I"。
*/
//String substring(int beginIndex):返回一个新的字符串,它是此字符串的从beginIndex开始截取到最后的一个子字符串。
//String substring(int beginIndex, int endIndex) :返回一个新字符串,它是此字符串从beginIndex开始截取到endIndex(不包含)的一个子字符串。
package LeetCode;
public class offer58_1 {
public static void main(String[] args) {
String s = reverseWords("the sky is blue");
System.out.println(s);
}
public static String reverseWords(String s) {
s=s+" ";
String string="";
char[] chars = s.toCharArray();
int a,b=0;
for (int i = b; i <chars.length ;i++) {
if (chars[i]!=' '){
a=i;
for (int j = i+1; j <chars.length ; j++) {
if (chars[j]==' '){
b=j;
i=b;
String substring = s.substring(a, b+1);
string=substring+string;
break;
}
}
}
}
String trim = string.trim();
return string;
}
}
/*
class Solution {
public String reverseWords(String s) {
}
}
*/
三、官方答案(Java)
官方答案过长且部分看不太懂,这里只放链接:官方答案