Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
解答:
进行两次翻转操作,先对每个单词进行翻转,再对整个字符串进行翻转
这里的测试用例同时要求,去掉字符串前后的空字符,同时单词间若包含多个空字符,则只留一个空字符进行单词间的相隔即可。
class Solution {
public:
void rever(string& s, int begin, int end){
if(s.size() <= 1) return;
int b = begin, e = end;
while(b < e){
char t = s[b];
s[b] = s[e];
s[e] = t;
b++;
e--;
}
}
void reverseWords(string &s) {
if(s.size() <= 0) return;
int len = s.size();
int begin = 0;
int end = 0;
int index = 0;
int count = 0;
while(index < len){
while(index < len && s[index] == ' ') index++;
if(index == s.size())
break;
if(count) s[end++] = ' ';
begin = end;
while(index < len && s[index] != ' '){
s[end++] = s[index++];
}
rever(s, begin, end - 1);
count++;
}
s.resize(end); //这句话很重要
rever(s, 0, end-1);
}
};