使用双指针的思路,即使用两个指针指向最后一个单词的开始和结束,然后使用substring() 进行切分,使用一个stringBuilder去存储结果即可。
需要注意的点:
- 首先是最后有空格的情况的处理,需要想使i指向最后一个部位空格的字符,这里用倒叙循环解决
- 输出时最后一个字符串后面没有空格的问题,简繁使用一个flag解决,即每次添加单词前先添加空格,但第一个单词前不添加
`总体代码如下:
class Solution {
public String reverseWords(String s) {
StringBuilder ans = new StringBuilder();
int i= s.length() - 1;
int j ;
while(i >= 0 && s.charAt(i) == ' ')//找到不为空格的单词位
i--;
boolean flag = true; //控制第一次不输入空格
while(i >= 0)
{
j = i;
while(i >= 0 &&s.charAt(i) != ' ' ){
i--;
}
if(!flag)
{
ans.append(' ');
}
flag = false;
ans.append(s.substring(i + 1 ,j + 1));
while(i >= 0 && s.charAt(i) == ' ')//跳过空格
i--;
}
return ans.toString();
}
}