LeetCode | 151. Reverse Words in a String

题目:

Given an input string, reverse the string word by word.

Example:  

Input: "the sky is blue",
Output: "blue is sky the".

Note:

  • A word is defined as a sequence of non-space characters.
  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up: For C programmers, try to solve it in-place in O(1) space.

解题思路:

难点在于不能使用太多额外的空间,只能O(1)。首先将整个字符串翻转,然后过滤单词,过程中去掉多余的空格,并对每个单词进行翻转。

代码:

public:
    void reverseWords(string &s) {
        if(s.length() < 1)
            return;
        reverse(s.begin(), s.end());
        string r = "", cur = "";
        for(int i = 0; i<s.length(); i++)
        {
            if(s[i] == ' ')
            {
                if(cur.length() > 0)
                {
                    reverse(cur.begin(), cur.end());
                    if(r.length() > 0)
                        r += ' ' + cur;
                    else
                        r = cur;
                    cur = "";
                }
                continue;
            }
            cur += s[i];
        }
        if(cur.length() > 0)
        {
            reverse(cur.begin(), cur.end());
            if(r.length() > 0)
                r += ' ' + cur;
            else
                r = cur;
        }
        s = r;
        return;
    }

猜你喜欢

转载自blog.csdn.net/iLOVEJohnny/article/details/81415258