【栈】Leetcode 字符串解码

题目讲解

394. 字符串解码
在这里插入图片描述


算法讲解

这道题有四种情况:1.遍历的时候遇到数字,我们计算并保存数字,将它加入到数字栈中;2.遍历的时候遇到[,我们就把字符保存,加入到字符栈中;3.当遇到],我们及时按照数字栈的栈顶元素的数字,添加字符栈中栈顶元素的次数;4.如果当前遍历的时候上述情况什么都不是,说明是正常的字符串,直接在字符栈的栈顶中添加即可

class Solution {
public:
    string decodeString(string s) {
        stack<int> stack_num;
        stack<string> stack_string;
        stack_string.push("");
        int i = 0;
        while(i < s.size())
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int temp_num = 0;
                while(isdigit(s[i]))
                {
                    temp_num = temp_num * 10 +(s[i] - '0');
                    i++;
                }
                stack_num.push(temp_num);
            }
            else if(s[i] == '[')
            {
                i++;
                string temp_string;
                while(s[i] >= 'a' && s[i] <= 'z')
                {
                    temp_string += s[i];
                    i++;
                }
                stack_string.push(temp_string);
            }
            else if(s[i] == ']')
            {
                string temp_string = stack_string.top();
                stack_string.pop();
                int  cnt = stack_num.top();
                stack_num.pop();
                while(cnt--)
                {
                    stack_string.top() += temp_string;
                }
                i++;
            }
            //这个是字母前面没有数字的是 所以就是需要将它单独添加在栈里面
            else
            {
                string temp_string;
                while(i < s.size() && s[i] >= 'a' && s[i] <= 'z')
                {
                    temp_string += s[i];
                    i++;
                }
                stack_string.top() += temp_string;
            }
        }
        return stack_string.top();
    }
};
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值