[string]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".

Update (2015-02-12):
For C programmers: Try to solve it in-place in O(1) space.

click to show clarification.

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.
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);
    }
};

 

posted @ 2015-12-06 19:02  zengzy  阅读(216)  评论(0编辑  收藏  举报
levels of contents