剑指No.58-1_翻转单词顺序
- 题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
示例:输入: " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
- 调用Java库函数
public String reverseWordsWay(String s){
s = s.trim();
String[] split = s.split(" +");
StringBuilder result = new StringBuilder();
for (int i = split.length - 1; i >= 0; i--){
result.append(split[i]);
if (i != 0)
result.append(" ");
}
return result.toString();
}
- 双指针
public String reverseWordsWay(String s){
s = s.trim();
StringBuilder result = new StringBuilder();
// 定义尾指针
int j = s.length() - 1;
// 定义首指针
int i = j;
while (i >= 0){
// 寻找第一个空格出现的位置
while (i >= 0 && s.charAt(i) != ' ')
i--;
// 添加单词
result.append(s.substring(i + 1, j + 1) + " ");
// 跳过单词中间的所有空格
while (i >= 0 && s.charAt(i) == ' ')
i--;
// 把单词的尾部赋给j
j = i;
}
// 要去掉尾部多余的空格
return result.toString().trim();
}