方法1:原地翻转,再单词翻转
class Solution {
public:
void reverseWords(string &s) {
vector<string> str;
int n=s.size();
int i=0,j=n-1;
while(i<j)
{
swap(s[i],s[j]);
i++;
j--;
}
string tmp="";
for(i=0;i<n;i++)
{
if(s[i]!=' ')
{
for(j=i;j<n&&s[j]!=' ';j++);
j--;
int sta=i;
int end=j;
while(i<j)
{
swap(s[i],s[j]);
i++;
j--;
}
if(tmp=="")
tmp=s.substr(sta,end-sta+1);
else
tmp+=" "+s.substr(sta,end-sta+1);
i=end;
}
}
s=tmp;
}
};
方法2:使用vector保存单词
class Solution {
public:
void reverseWords(string &s) {
vector<string> str;
int n=s.size();
int i;
for(i=0;i<n;i++)
{
string tmp="";
while(i<n&&s[i]!=' ')
{
tmp+=s[i];
i++;
}
if(tmp!="")
str.push_back(tmp);
}
s="";
for(i=str.size()-1;i>=0;i--)
{
s+=str[i];
if(i)
s+=' ';
}
}
};
方法3:可以用字符串的输入输出流
class Solution {
public:
void reverseWords(string &s) {
if(s=="")
return;
int n=s.size(),j=n-1;
while(j>=0&&s[j]==' ')
j--;
if(j<0)
{
s="";
return ;
}
istringstream str(s);
string word="";
string res="";
while(str>>word)
{
res=" "+word+res;
}
s=res.substr(1);
}
};