时间O(n),空间O(1)。代码如下,注意细节:
class Solution {
public:
void reverseWords(string &s) {
int len = s.size();
int cur = 0;
int idx = 0;
int start, end;
while(idx < len)
{
while(idx < len && s[idx] == ' ') idx++;
start = cur;
while(idx < len && s[idx] != ' ')
s[cur++] = s[idx++];
end = cur-1;
reverseWord(s, start, end);
if(idx < len)
s[cur++] = s[idx++];
}
if(s[cur-1] == ' ') cur--;
s.resize(cur);
reverseWord(s, 0, cur-1);
}
void reverseWord(string &word, int start, int end)
{
if(start >= end) return;
while(start <= end)
{
char tmp = word[start];
word[start] = word[end];
word[end] = tmp;
start++;
end--;
}
}
};