leetcode151翻轉字符串裏的單詞_C++_med

給定一個字符串,逐個翻轉字符串中的每個單詞。

 

示例 1:

輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:

輸入: "  hello world!  "
輸出: "world! hello"
解釋: 輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
示例 3:

輸入: "a good   example"
輸出: "example good a"
解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
 

說明:

無空格字符構成一個單詞。
輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。
如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

 

思路:

這個想法就很簡單,把每個單詞用vector<string>存起來,再按照要求從後往前依次拿出來,最後輸出。

class Solution {
public:
    string reverseWords(string s) {
        vector<string> re;
        string out;
        for(int i=0; i<= s.size(); i++)
        {
            if( i == s.size())
            {
                if( out.size() !=0)
                {
                    re.push_back(out);
                }
                break;
            }
            char a=s[i];
            if(a != ' ')
            {
                out.push_back(a);
            }
            else if( a == ' ' && out.size() != 0)
            {
                re.push_back(out);
                out.clear();
            }
        }
        string res;
       for(int i=re.size()-1; i>0; i--)
       {
           res = res+(re[i]+" ");
       }
        if(re.size() >0)
        {
            res += re[0];
        }
       
        return res;
    }
};

 

第二種方法: 先把整個字符串整體翻轉一次,再把其中的單詞逐個單獨翻轉。把多餘的空格去掉,可以實現空間複雜度O(1)的操作。具體方法代碼待增加。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章