
思路:先整体翻转,再局部翻转。遇到空格就跳过,对于不是第一个单词的词前加空格。
因为有效单词前可能会有空格,所以可以采用覆盖的方法,不用开辟新数组。
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end());
int n = s.size();
int left = 0; //指向新数组的每个单词首
int right = 0; //指向新数组的每个单词尾巴
int index = 0;
for(int index = 0; index < n; index++) { //index遍历原数组的下标
if(s[index] == ' ') continue;
if(right != 0) s[right++] = ' ';
left = right;
while(index < n && s[index] != ' ') { //这里注意防止数组越界
s[right++] = s[index++];
}
reverse(&s[left], &s[right]);
}
s.erase(s.begin() + right, s.end()); //记得删除后面多余的部分
return s;
}
};