void reverseWords(string &s) { int i=0, j=0, wordStart=0; // i: index to scan the origin string; j: index to create the result int len=s.length(); bool firstWord=true; while (true) { while (i<len && s[i] == ' ') i++; // skip spaces in front of the word if (i==len) break; if (firstWord) firstWord = false; // add one space between words else s[j++] = ' '; wordStart=j; while (i<len && s[i]!=' ') {s[j]=s[i]; j++; i++;} reverseword(s, wordStart, j-1); // reverse letters in each word } s.resize(j); // resize result string reverseword(s, 0, j-1); // reverse whole string }
void Solution::reverseWords(string &s) { int i=0, j=0; int l=0; int len=s.length(); int wordcount=0; while(true){ while(i<len && s[i] == ' ') i++; // skip spaces in front of the word if(i==len) break; if(wordcount) s[j++]=' '; l=j; while(i<len && s[i] != ' ') {s[j]=s[i]; j++; i++;} reverseword(s,l,j-1); // reverse word in place wordcount++; } s.resize(j); // resize result string reverseword(s,0,j-1); // reverse whole string }