想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。
所以解题思路如下:
- 移除多余空格
- 将整个字符串反转
- 将每个单词反转
举个例子,源字符串为:"the sky is blue "
- 移除多余空格 : "the sky is blue"
- 字符串反转:"eulb si yks eht"
- 单词反转:"blue is sky the"
这样我们就完成了翻转字符串里的单词。
cpp
class Solution {
public:
void removespace(string &s){
int slow =0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
if(slow!=0){s[slow++]=' ';}
while(i<s.size()&&s[i]!=' '){
s[slow++]=s[i++];
}
}
}
s.resize(slow);
}
string reverseWords(string s) {
removespace(s);
reverse(s.begin(),s.end());
auto start=s.begin();
int count=0;
for(int i=0;i<=s.size();i++){
if(s[i]==' '||i==s.size())
{
reverse(start,s.begin()+i);
start=(s.begin()+i+1);
}
}
return s;
}
};