557. 反转字符串中的单词 III
题目要求
示例 1:
输入:s = “Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”
示例 2:
输入: s = “Mr Ding”
输出:“rM gniD”
思路:
第一步:让 i 指向起始位置,当 i 不为空格时,就往后挪动,遇到空格就停下来,此时 i 指向空格
第二步:交换反转第一个单词 Let’s 的顺序
第三步:重复1,2步骤。将所有的单词都自己反转。如下
如果是反转每个单词在顺序,那么就在加上第四步。
第四步:整体反转一遍。
C++代码
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;
}
};