leetcode-394. Decode String

考察点:栈的使用,解析字符串
思路:使用两个栈:一个数字栈,一个string栈;数字栈栈顶表示string栈栈顶string的重复次数。从头到尾遍历string,遇到数字要提取数字,并压入数字栈,遇到 ‘[’要压入string栈空的string,遇到字母要将string栈栈顶的string拼接这个字母然后压栈,遇到‘]’要将string栈和num栈出栈重新拼接新的string入栈。最后在循环外要将string栈出栈。
C++ 代码:

class Solution {
public:
    string decodeString(string s) {
        stack<int> num_sta;
        stack<string> str_sta;
        num_sta.push(1);
        str_sta.push("");
        int i=0;

        while (i < s.size()) {
            if (s[i] <= 'z' && s[i] >= 'a') {
                string temp = str_sta.top() + s[i];
                str_sta.pop();
                str_sta.push(temp);
            } else if (isdigit(s[i])) {
                int j = i;
                while (isdigit(s[i])) {
                    i++;
                }
                int num = stoi(s.substr(j,i-j));
                num_sta.push(num);
                i--;
            } else if (s[i] == '[') {
                str_sta.push("");
            } else if (s[i] == ']') {
                int num = num_sta.top();
                num_sta.pop();
                string temp = str_sta.top();
                str_sta.pop();
                string res;
                for (int k=0; k<num; k++) {
                    res += temp;
                }
                string temp_2 = str_sta.top();
                str_sta.pop();
                str_sta.push(temp_2 + res);

            }

            i++;
        }
        return str_sta.top();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值