剑指 Offer 58 - I. 翻转单词顺序
题目
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
思路
双指针,倒叙遍历字符串s,记录单词左右索引边界i,j。每次确定一个单词的边界,就将其添加到单词列表res中,最终,将单词列表拼接为字符串,并返回即可。
代码
class Solution {
public String reverseWords(String s) {
s = s.trim();// 删除首尾空格
int j = s.length() - 1,i = j;
StringBuilder res = new StringBuilder();
// 从后往前搜索
// "hello world"
while(i >= 0)
{
while(i >= 0 && s.charAt(i) != ' ') i--;// 搜索首个空格 遇到空格i停止搜索
// 分割字符串 从i + 1开始不是空格 然后到j位置(j+1取不到)
res.append(s.substring(i + 1,j + 1) + " ");// 添加单词
while(i >= 0 && s.charAt(i) == ' ')
{
i--;// 跳过单词间空格
}
// 更新j 然后下一步接着移动i
j = i;
}
return res.toString().trim();//转化为字符串并且返回
}
}