【4月打卡】Leetcode-151翻轉字符串裏的單詞

使用棧

將單詞壓入棧,再彈出重新組合成字符串。

class Solution {
public:
    string reverseWords(string s) {
        if(s=="") return s;
        stack<string> stk;
        string str="";
        int st=0,ed=s.length()-1;
        while(st<=ed&&s[st]==' ')//刪去前面空格
            st++;
        if(st>ed)return str;//s="           "的特殊情況
        while(s[ed]==' ')//刪去前面空格
            ed--;
        for(int i=st;i<=ed;i++)
        {
            if(s[i]!=' ')
                str+=s[i];
            else
            {
                if(s[i-1]!=' ')//刪去中間兩個空格
                {
                    stk.push(str); 
                    str="";  
                }
            }   
        }
        str=(str!="")?str+' ':str;
        while(!stk.empty())
        {
            str+=stk.top()+' ';
            stk.pop();
        }
        return str.substr(0,str.size()-1);
    }
};

不使用棧

先整體反轉,再根據空格鎖定s[i,ed],即單詞的位置,局部反轉加回去。

class Solution {
public:
    string reverseWords(string s) {
        reverse(s.begin(),s.end());
        string str="",tmp;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]!=' ')
            {
                int ed=i;
                while(ed<s.length()&&s[ed]!=' ')
                    ed++;
                tmp=s.substr(i,ed-i);
                reverse(tmp.begin(),tmp.end());
                str+=tmp+' ';
                i=ed-1;
            }
        }
        return str.substr(0,str.size()-1);
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章