557. 反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。
示例 1:
输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc"
注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。
解法一
//时间复杂度O(n), 空间复杂度O(1)
class Solution {
public:
string reverseWords(string s) {
int idx = 0, i, j;
while(idx < s.size()) {
i = idx;
while(idx < s.size() && s[idx++] != ' ');
if(idx < s.size()) j = idx - 2;
else j = s.size() - 1;//idx到达右边界
while(i < j) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++, j--;
}
}
return s;
}
};
思路: 双指针法,与题541类似。
- idx始终指向下一个单词的首字母;
- i、j所指的子串是要反转的单词,i初始化为idx。因为题上说没有多余的空格,所以可以用idx - 2来初始化j。注意处理idx到达右边界时的情况。
- idx每次向后移一个单词,直到遍历完成,返回s。
2019/05/31 21:18
来源:CSDN
作者:wanghy1995
链接:https://blog.csdn.net/sinat_27953939/article/details/103784780