1。 与LeetCode151题相同。
我的解题:
注意s为空或者只有空格的情况
class Solution {
public:
string reverseWords(string s) {
if(s.empty()) return "";
istringstream word(s);
string w;
string res;
while(word>>w){
res=w+' '+res;
}
return res.empty()?"":string(res.begin(),res.end()-1);
}
};
2,看到面经中有人问空间复杂度为O(1)的方法
现去除多余的空格,再全部原地翻转,在逐个单词的翻转
class Solution {
public:
string reverseWords(string s) {
if(s.size()==0) return s;
while(s[0]==' '){
s.erase(0,1);
}
while(1){
int i=s.size()-1;
if(i>=0&&s[i]==' ') s.erase(i,1);
else break;
}
reverse(s.begin(),s.end());
int j=1,i=0;
while(i<s.length()){
if(s[i]==' '&& s[j]==' '){
while(s[j]==' ')
j++;
s.erase(i,j-i-1);
j=i+1;
}
else{
i++;
j++;
}
}
int l=0,r=0;
while(l<s.length()){
if(s[r]==' '||s[r]=='\0'){
reverse(s.begin()+l,s.begin()+r);
l=r+1;
}
r++;
}
return s;
}
};