原题链接
题解思路,操作分解,先把整体翻转,然后使用双指针算法分割出单个单词再次进行翻转。
class Solution {
public:string reverseWords(string s) {int k = 0;//保存单词首字母位置for (int i = 0; i < s.size(); i ++ ) {if (s[i] == ' ') continue;//先过滤到前面的空格int j = i, t = k;while (j < s.size() && s[j] != ' ') s[t ++ ] = s[j ++ ];//逐个找出单词reverse(s.begin() + k, s.begin() + t);//对单词进行翻转s[t ++ ] = ' ';//单词与单词之间需要有空格间隔k = t, i = j;//更新相应位置}if (k) k -- ;//删除最后的空格s.erase(s.begin() + k, s.end());//删除K后多余的部分reverse(s.begin(), s.end());//将整个区间翻转return s;}
};