394. 字符串解码

Q:

在这里插入图片描述

递归:

class Solution {
public:
    string decodeString(string s) {
        if (s.empty()){
            return "";
        }
        string res="",str;
        int i=0,siz=s.size();
        int repeat=0,temp=0;
        while(i<siz){
            if (s[i]<='9' and s[i]>='0'){
                temp=temp*10+(s[i]-'0');
            }
            else if (s[i]=='['){
                int left_bracket=1,j=i+1;
                while(left_bracket){
                    if(s[j]==']'){
                        left_bracket--;
                    }
                    else if(s[j]=='['){
                        left_bracket++;
                    }
                    ++j;
                }
                str=decodeString(s.substr(i+1,j-2-i));
                for(int i=0;i<temp;++i){
                    res+=str;
                }
                temp=0;
                i=j-1;
            }
            else{
                res+=s[i];
            }
            ++i;
        }   
        // cout<<res<<endl;
        return res;
    }
};

迭代:

class Solution {
public:
    string decodeString(string s) {
        stack<string> sta1;
        stack<int> sta2;
        string res="",str;
        int i=0,siz=s.size(),num=0;
        while(i<siz){
            if(s[i]=='['){
                sta1.push(res);
                sta2.push(num);
                num=0;
                res="";
            }
            else if(s[i]==']'){
                str=res;
                res=sta1.top();
                sta1.pop();
                for(int j=0;j<sta2.top();++j){
                    res+=str;
                }
                sta2.pop();
            }
            else if(isdigit(s[i])){
                num=num*10+(s[i]-'0');
            }
            else{//isalpha
                res+=s[i];
            }
            ++i;
        }
        return res;
    }
};
posted @ 2019-11-28 18:09  NeoZy  阅读(145)  评论(0)    收藏  举报