LeetCode 151. 翻转字符串里的单词
原题链接
中等
作者:
Omega_
,
2020-08-21 10:03:21
,
所有人可见
,
阅读 619
内容见注释
/*
思路:
取每一段字符串的有效字符,翻转后加一空格,按顺序重新填充到初始的字符串空间内。
这样不容易出现边界问题,保证前后没有空格,而且字符的顺序,空格的数量不会乱。
填充完成后将s最后所有的空格都删除掉。
再反转就可以了。细节部分见注释
*/
class Solution {
public:
string reverseWords(string s) {
int k = 0; //新字符串的起点;
for(int i = 0 ; i < s.size(); i )
{
int j = i;
while(j < s.size() && s[j] == ' ') j++; // 去除前导空格
if (j == s.size()) break; //这里break是为了保证最后不会s[k++] = ' ',多加一个空格
i = j; // i 是 当前字符串的起点
while(j < s.size() && s[j] != ' ') j++;
if(k) s[k++] = ' ';
reverse(s.begin() + i,s.begin() + j); //反转当前小段
while(j > i) s[k++] = s[i++]; //重新填充,对齐
}
s.erase(s.begin() + k ,s.end()); //删除后导空格
reverse(s.begin(),s.end());//全局反转
return s;
}
};