class Solution {
public:
string reverseWords(string s) {
/* 错误的去除空格
int j = 0;
while (j < s.length() && s.length() > 0 && s[j] == ' '){
s[j] = s[j+1];//000s->00s->0s->s
j++;
}
// 中间的空格
int newLength = 0;
for (int i = j; i < s.length(); i++) {
if (s[i] == ' ' && s[i-1] == ' ' && i > 1) {
s[i-1] = s[i];
continue;
}
newLength++;
}
// 最后的空格
if (s[newLength-1] == ' ') {
s.resize(newLength - 1);
} else {
s.resize(newLength);
}
*/
// 去除空格
// 去除前面的空格,中间重复的空格,最后的空格
// 第一反应统计所有空格数?但不能确定,中间的空格,保留的还是删除
int j = 0;
while (j < s.length() && s.length() > 0 && s[j] == ' '){
j++;
}
// 中间的空格
int newLength = 0;
for (int i = j; i < s.length(); i++) {
if (s[i] == ' ' && s[i-1] == s[i] && i > 1) {
continue;
}
s[newLength++] = s[i];
}
// 最后的空格
if (s[newLength-1] == ' ' && newLength > 1) {
s.resize(newLength - 1);
} else {
s.resize(newLength);
}
// 翻转整句话
reverse(s.begin(), s.end());
// 翻转每个单词
int temp = 0;
for (int i = 0; i < s.length(); i++) {
if(s[i] == ' ') {
reverse(s.begin() + temp, s.begin() + i);
temp = i + 1;
}
if (i == s.length() - 1) {
reverse(s.begin() + temp, s.end());
}
}
return s;
}
};
总结
- 快慢双指针去空格
- 翻转整句
- 单个单词翻转