翻转单词顺序

问题陈述

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。

1
2
3
4
5
示例:

输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

思路分析

先对字符串去除首位空格,定义i,j指向字符串尾,i–,当i为空格返回第一个字符串;然后继续i–,当i不是空格,j指向i。重复,用stringbuilder存储。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution{
public String reverseWords(String s){
s=s.trim();
int i=s.length()-1,j=i;
StringBuilder res=new StringBuilder();
while(i>=0){//必须再加这一层循环判断,不然第二个while判断到空就结束了。
while(i>=0&&s.charAt(i)!=' '){
i--;
}
res.append(s.substring(i+1,j+1)+" ");//substring(i,j)函数:即得到从i开始,到j-1结尾的字符串。注意此处substring两个s都是小写。
while(i>=0&&s.charAt(i)==' '){
i--;
}
j=i;
}
return res.toString().trim();//将StringBuilder转化为String。
}

}