Reverse Words in a String
Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Clarification:
- What constitutes a word?
A sequence of non-space characters constitutes a word. - Could the input string contain leading or trailing spaces?
Yes. However, your reversed string should not contain leading or trailing spaces. - How about multiple spaces between two words?
Reduce them to a single space in the reversed string.
思路:
一开始拿到题目以为是经典的字符串翻转问题,先将所有的字符串翻转,然后逐单词翻转。后来发现不对,加入了空格处理。
我的思路是按照空格,分割字符串,将非空字符串存入到vector中,然后再逆序拼接起来。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution
{
public:
void reverseWords(string &s)
{
vector<string> strlist;
vector<string>::iterator iter;
int index = 0;
string str_temp = "";
while(true)
{
index = s.find(" ");
if(-1 == index)
{
str_temp = s.substr(0, s.length());
if(str_temp != "")
strlist.push_back(str_temp);
break;
}
str_temp = s.substr(0,index);
if(str_temp != "")
strlist.push_back(str_temp);
s.erase(0,index+1);
}
s = "";
//iter只能从strlist.begin()到strlist.end(),超出这个范围会出问题
//因此当iter=strlist.begin()时,再用iter--就出错!
for(iter = strlist.end(); iter>strlist.begin();iter--)
{
s += *(iter-1);
if((iter-1)!= strlist.begin())
s += " ";
}
}
};
测试代码:
int main()
{
string a = " the sky is blue ";
string b = " b";
Solution solu;
solu.reverseWords(b);
cout<<b<<endl;
return 0;
}
runtime:52ms