1. 题目描述
题目链接:557. 反转字符串中的单词 III
2. 解题思路
此题也可以直接在原字符串上进行操作,避免额外的空间开销。
当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符……如此反复,就可以在原空间上翻转单词。
我们让 i
指向起始位置,当 i
不为空格时,就往后挪动,遇到空格就停下来,此时 i
指向空格
此时我们交换反转第一个单词 Let's
的顺序
此时 i
还是指向空格的,所以我们需要再把 i
往后移动,让它指向下一个单词
这样,我们就完成了对一个单词的反转,我们用个 while
循环完成对整个句子里面单词的反转,而循环结束的条件就是 i < s.length()
3. 代码实现
代码示例
class Solution {
public:
string reverseWords(string s) {
int len = s.length();
int i = 0;
while (i < len) {
int start = i;
// 1.找到第一个单词,遇到空格就停止
while (i < len && s[i] != ' ') {
i++;
}
// 2.反转单词的顺序
int left = start;
int right = i - 1;
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
// 3.此时i还是指向空格的,所以继续让i++,指向下一个单词
while (i < len && s[i] == ' ') {
i++;
}
}
return s;
}
};