您的位置:首页 > 其它

LeetCode题解——Reverse Words in a String

2015-11-03 17:05 567 查看
Given an input string, reverse the string word by word.

For example,

Given s = "
the sky is blue
",

return "
blue is sky the
".

Try to solve it in-place in O(1)
space.

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.

解题思路:如果不需要inplace,那么可以借助于stringstream和vector或者substr等操作,可以很容易的实现reverse,但是如果要用inplace的翻转的话,需要新的想法。
分为两步:第一步翻转句子中的所有字符串,第二步翻转每个单词的顺序。在此过程中要考虑处理连续的空字符。
AC代码如下:
class Solution {
public:
void reverseWords2(string &s,string::iterator begin,string::iterator end){
if(!*begin || !*end) return;
while(begin<end){
char temp = *begin;
*begin = *end;
* end = temp;
++begin;
--end;
}
}
void reverseWords(string &s) {
while(s.size() && *s.begin()==' ') s.erase(s.begin());
if(!s.size()) return;
reverseWords2(s,s.begin(),s.end()-1);
string::iterator  begin = s.begin(), end =s.begin();
while(begin!=s.end()-1){
if(*begin==' '){ s.erase(begin);}//++begin; ++end;}
else if(end == s.end() || *end ==' '){
reverseWords2(s,begin,end-1);
if(end == s.end()) return;
begin = ++end;
}
else{
++end;
}
}
}
//erase操作耗时
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: