题目:
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
首先把句子看做由词组成的,例如“A B C”,因此可以将句子的所有字符前后交换,得到“C' B' A'"。显然X‘表示逆序的词X,所以第二步是将每个词中的字符串前后交换。整个过程的时间复杂度为O(n),空间复杂度为O(1)。这种方法的缺点是没有考虑许多特殊情况,例如字符串中有连续的空格,字符串开始结尾处有空格等。
代码如下:
#include<iostream>
#include<string>
using namespace std;
class Solution{
public:
void reverseWords(string &s)
{
int start=0;
int end=0;
while(end<s.size())
{
if(s[end]==' ')
{
swapString(s,start,end-1);
start=end+1;
end=start;
}
else
end++;
}
swapString(s,start,end-1);
swapString(s,0,s.size()-1);
}
void swapString(string &s, int start, int end)
{
while(end>start)
{
char c=s[start];
s[start]=s[end];
s[end]=c;
start++;
end--;
}
}
};
int main()
{
string str="I am a student";
Solution Solu;
Solu.reverseWords(str);
cout<<str<<endl;
system("pause");
return 0;
}
输出结果: