Sword58-I——翻转单词顺序
方法1——双指针
- 思路:使用双指针,因为其为翻转,所以从后往前遍历,每遇到一个空格,即证明此时为一个单词,将其进行拼接,之后找到前一个单词,再次拼接
- 特殊情况与临界分析:无
- 终止条件:无
- 步骤:
- 删除字符串前后空格,防止影响遍历
- 定义双指针,从后往前
- 定义StringBuilder用于拼接
- while循环
- 循环条件:left未越界,即大于等于0时
- while循环,当left未越界且left处不为空格,一直向左递减
- 退出while循环,证明此时left为空格,截取(left此时为空格,因此为left + 1到right + 1)并拼接一个单词,最后加上空格
- 如上while循环再次判断是否不止一个空格,注意此时条件变成为空格,一直向左递减
- 退出while循环,证明此时left不为空格,即开始下一个单词的拼接,需要将right移动到left处
- 返回结果,因为每次拼接后都带有空格,因此去除多余的尾部空格
public String reverseWords(String s) {
s = s.trim();
int right = s.length() - 1, left = right;
StringBuilder res = new StringBuilder();
while (left >= 0) {
while (left >= 0 && s.charAt(left) != ' ') {
left--;
}
res.append(s.substring(left + 1, right + 1) + " ");
while (left >= 0 && s.charAt(left) == ' ') {
left--;
}
right = left;
}
return res.toString().trim();
}
