您的位置:首页 > 其它

Reverse Words in a String

2014-10-27 12:50 531 查看
题目要求:

Given an input string, reverse the string word by word.

For example,

Given s = "
the sky is blue
",

return "
blue is sky the
".
分析:

       初步分析,有两种思路:

       1、采用剑指offer中所讲的两次翻转字符串解法,先将整个字符串翻转一次,再对每个单词翻转一次。

       2、遍历字符串,将单词抠出来拼接成目标串dest,具体是每抠出一个单词串temp,拼接在原有目标串前面,即dest=temp+' '+dest;

        本人采用思路一完成代码,此题虽然不难,但还是错了好几次,主要是特例情况考虑不周,如情况:

       s="       "

       s="      a      "

代码:

#include <iostream>
#include<string>

using namespace std;

class Solution {
public:
void reverseWords(string &s) {
if(!s.empty())
{
int n=s.size()-1;
int high=0;
int low=0;
bool sign=true;

reverse_range(s,0,n);
while(high<=n)
{
if(s[high]!=' ')
{
if(high==n)
{
reverse_range(s,low,n);
}
high++;
sign=false;
}
else
{
if(sign==false)
{
reverse_range(s,low,high-1);
high++;
low=high;
sign=true;
}
else
{
s.erase(high,1);
n--;
}

}
}
if(s
==' ')
{
s.erase(n,1);
n--;
}
}
}
void reverse_range(string &s,int low,int high)
{
char tmp=NULL;
while(low<high)
{
tmp=s[low];
s[low]=s[high];
s[high]=tmp;
low++;
high--;
}
}
};
void main()
{
string src=" this is a test ";
Solution s;
s.reverseWords(src);
cout<<src<<endl;
getchar();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode STL string Reverse