1. 程式人生 > >LeetCode 557:反轉字串中的單詞 III

LeetCode 557:反轉字串中的單詞 III

給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。

Input格式:

輸入: "Let's take LeetCode contest"

輸出: "s'teL ekat edoCteeL tsetnoc"

注意:在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。

個人思路:
反轉字串問題,將字串反轉輸出,可以從棧(先進後出)的方向來思考,對於此題同樣很適合,按照題目要求,每個單詞反轉之後仍按照之前的順序排列,所以我們可以先對字串進行遍歷,在S[i] != ' '的情況下,壓進棧,當S[i] == ' '時,通過while,我們可以設定一個空字串接收彈出的字元,並在後面加上此處的S[i]為空格,由於最後一個單詞後無空格字元,所以在遍歷完成之後,棧記憶體有最後一個單詞,再將其彈出即可

程式碼:

class Solution {
public:
    string reverseWords(string s) {
        stack<char> sk;
        string ss = "";
        if(s.size() == 0){
            return s;
        }
        if(s == " "){
            return s;
        }
        for(int i=0;i<s.size();i++){
            if(s[i] != ' '){
                sk.push(s[i]);
            }
            if(s[i] == ' '){
                while(sk.empty() == false){
                    ss += sk.top();
                    sk.pop();
                }
                ss += s[i];
            }
        }
        while(sk.empty() == false){
                ss += sk.top();
                sk.pop();
        }
        return ss;
    }
};

//水平不高(水水題),各位多包涵,有更好想法可以互相交流