Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.
class Solution { public: void formatWords(string& s) { int sSize = s.size(); int i=0,j=0,k=sSize; while(i<sSize && s[i]==‘ ‘) i++; while(k>=0 && s[k-1]==‘ ‘) k--; bool isFirstSpace = true; while(i<k){ if(s[i] != ‘ ‘){ isFirstSpace = true; s[j++] = s[i++]; continue; } if(isFirstSpace){ s[j++] = ‘ ‘; isFirstSpace = false; } i++; } s.erase(s.begin()+j,s.end()); } void reverseStr(string &s,int startPos,int endPos) { while(startPos<endPos){ swap(s[startPos++],s[--endPos]); } } void reverseWords(string &s) { formatWords(s); int sSize = s.size(); reverseStr(s,0,sSize); int i=0,startPos = 0; bool isFirstAlph=true; for(;i<sSize;i++){ if(s[i]==‘ ‘){ reverseStr(s,startPos,i); isFirstAlph = true; continue; } if(isFirstAlph){ startPos = i; isFirstAlph = false; } } reverseStr(s,startPos,i); } };
[string]Reverse Words in a String
原文:http://www.cnblogs.com/zengzy/p/5024096.html