思路: 尽可能将元字符串的空格字符位置找到,采用两个索引变量i, j 指示相邻的空字符,如果| i -j | >= 2说明a[i]与a[j] 之间有正常字符,所以可以取为一个word存储下来。此外,将一个额外的空字符加到原字符串的末尾,可以将这设置为第一个空字符的位置(我们已知),类似于哨兵思想。
具体代码:
class Solution {
public:
void reverseWords(string &s) {
string ret,temp;
s += ' ';
int lenght = s.length();
int k = lenght-1;
bool flag = 0;
for(int i = lenght-2;i>=0;i--){
if(s[i] == ' '){
if(k - i <=1){
flag = 0;
}
else{
flag = 1;
temp = s.substr(i+1,k - i);
}
k = i;
}
else if(i == 0){
temp = s.substr(i,k-i+1);
flag = 1;
}
//cout<<flag<<endl;
if(flag){
ret += temp;
//ret += ' ';
flag = 0;
}
}
ret = ret.substr(0,ret.length()-1);
s = ret;
}
};
欢迎找出其中的bug。