这道题,要分开来看。第一步,去除多余的空格,方法和去除数组中的数字一样,双指针法。
fast表示遍历找到新元素,slow表示新数组要插入元素的位置。。
对了,处理了后要对字符串resize(n)空间
第二,对整体翻转
第三,对单词翻转
class Solution {
public:
string reverseWords(string s) {
int slow = 0;
for (int fast = 0; fast < s.size(); ++fast){
if (s[fast] != ' '){
if (slow != 0) s[slow++] = ' ';
while(fast < s.size() && s[fast] != ' '){
s[slow] = s[fast];
++fast;
++slow;
}
}
}
s.resize(slow);
reverse(s.begin(),s.end());
int k = 0;
for(int i = 0; i < s.size(); ++i){
if(s[i] == ' '){
reverse(s.begin() + k, s.begin() + i);
k = i + 1;
}
if(i == s.size() - 1) reverse(s.begin() + k, s.end());
}
return s;
}
};