1. 程式人生 > 實用技巧 >leetcode 394. 字串解碼(棧)

leetcode 394. 字串解碼(棧)

題目連結

https://leetcode-cn.com/problems/decode-string/

題意:

給定一行字串,判斷經過k[encoded_string]編碼規則後的結果

思路:

把每一層的字串,以及出現的次數放在棧裡面
最後記錄拼接完成後的結果

難點在於怎麼同時記錄巢狀的關係,比如3[a2[bc]4[d]]

class Solution {
public:
    //注意區域性的tmp 更新與全域性tmp更新的關係
    //不直觀,不好想
    //每次把之前處理好的放在棧裡
    string decodeString(string s) {
        stack<string> S;
        stack<int> S2;

        int num=0;
        string tmp="";
        string ans="";
        for(int i=0;i<s.size();i++){
            char cur=s[i];
            if(isdigit(cur)){//數字
                num=num*10+cur-'0';
            }
            else if(isalpha(cur)){
                tmp+=cur;
            }
            else if(cur=='['){
                S2.push(num);
                num=0;
                S.push(tmp);
                tmp="";
            }
            else{
                //前面部分的字串
                // string pre="";
                // if(S2.size()>1){
                //     pre=S.top();
                //     S.pop();
                // }

                int tmp_n=S2.top();
                S2.pop();
                // string tmp_s="";
                string tp=S.top();
                S.pop();
                
                for(int i=1;i<=tmp_n;i++){
                    // tmp_s+=tmp;
                    tp+=tmp;//不好想 3[a2[cc]]
                }

                tmp=tp;//不好想
                // pre+=tmp_s;
                // cout<<pre<<"\n";
                // S.push(pre);

                // if(!S2.size()) ans+=pre;
            }
        }

        ans=tmp;

        return ans;
    }
};