151. 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.

=====================

注意,

1,被空格包围的是单词

2,输入字符串可以以空格开头或结尾,但是结果中的字符不能以空格开头或结尾

3,输出字符串中单词间的空格是一个,不能重复出现空格.

思路:

对输入字符串进行去重空格操作,

对字符串中的每个单词进行反转

对整个字符串进行反转

====

code

class Solution {
public:
    void help_reverse(string &s,int start,int end){
        while(start<end){///经典的反转字符串方法
            swap(s[start++],s[end--]);
        }
    }
    string removeDuplicateSpace(string s){
        string res;
        int b = 0;
        for(;b<(int)s.size();b++){
            if(s[b]!= ' '){
                break;
            }
        }///
        int e = s.size() - 1;
        for(;e>=0;e--){
            if(s[e]!=' '){
                break;
            }
        }

        bool is_space = false;
        for(int i = b;i<=e;i++){
            if(s[i] == ' '){
                if(!is_space) is_space = true;
                else continue;
            }else{
                is_space = false;
            }
            res.push_back(s[i]);
        }
        return res;
    }
    void reverseWords(string &s) {
        if(s.empty()) return;
        s = removeDuplicateSpace(s);
        int start = 0;
        for(size_t i = 0;i<s.size();i++){
            if(s[i]!=' '){
                start = i;
            }else{
                continue;
            }
            size_t j = i;
            while(j<s.size() && s[j]!=' '){
                j++;
            }
            j--;
            help_reverse(s,start,j);
            i = j++;
        }
        help_reverse(s,0,(int)s.size()-1);
    }
};
原文地址:https://www.cnblogs.com/li-daphne/p/5608282.html