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:
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操作耗时 };