LC394

作者: 锦绣拾年 | 来源:发表于2020-06-06 19:47 被阅读0次

有点烧脑。
看了题解写出来的,在纸上画了画
主要用栈 但是怎么存放数据呢?这是一个问题

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

示例:

s = "3[a]2[bc]", 返回 "aaabcbc".
s = "3[a2[c]]", 返回 "accaccacc".
s = "2[abc]3[cd]ef", 返回 "abcabccdcdcdef".

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/decode-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
    string decodeString(string s) {
        //思考一下可以用栈
        //参考答案<int str(之前的res)'>
        //遇到]出栈
        //遇到[入栈
        //k会>9吗 可能
        int num=0;
        string tmp="";
        string res="";
        stack<pair<int,string>> ex;
        for(int i=0;i<s.length();i++){
            if(s[i]>='0'&&s[i]<='9'){
                num=num*10+(s[i]-'0');//计算num
            }else if(s[i]=='['){
                ex.push(make_pair(num,tmp));
                tmp="";
                num=0;
            }else if(s[i]==']'){
                pair<int,string> now=ex.top();
                string nstr="";
                for(int q=0;q<now.first;q++){
                    nstr+=tmp;//得到重复的这一部分
                }
                tmp=now.second+nstr;//tmp展开了
                res=tmp;
               // res+=nstr;
                //tmp="";
                num=0;
                ex.pop();
            }else{
                tmp+=s[i];
            }
        }
        res=tmp;
        return res;
    }
};

相关文章

  • LC394

    有点烧脑。看了题解写出来的,在纸上画了画主要用栈 但是怎么存放数据呢?这是一个问题

网友评论

      本文标题:LC394

      本文链接:https://www.haomeiwen.com/subject/nqrizhtx.html