Leetcode 热题100-394.字符串解码

Leetcode 热题100-394.字符串解码

1. 题目描述

394.字符串解码

2. 解题思路

  1. 使用一个 pair<string, int> 类型的栈 stk 用以保存当前字符及出现次数;

  2. 依次判断每个字符 ch

    • 若为 ‘[’,则将 (res, num) 压入栈中,其中 res 表示当前字符,num 表示出现次数;
    • 若为 ‘]’,则从栈顶取出 (cur_str, cur_num),并与 res 进行拼接,得到新的 res
    • 若为数字 0-9,则修改 num = num * 10 +(ch - ‘0’)
    • 若为字母,则修改 res += ch
  3. 判断完成后返回最终的 res

3. 代码实现

class Solution {
public:
    string decodeString(string s) {
        // 表示当前字符以及其出现次数
        stack<pair<string, int>> stk;
        int num = 0;
        string res = "";
        for (auto& ch : s) {
            if (ch == '[') {
                stk.emplace(res, num);
                num = 0;
                res = "";
            } else if (ch == ']') {
                auto[cur_str, cur_num] = stk.top();
                stk.pop();
                while (cur_num--)
                    cur_str += res;
                res = cur_str;
            } else if (ch >= '0' && ch <= '9') {
                num = num * 10 + (ch - '0');
            } else {
                res += ch;
            }
        }
        return res;
    }
};
  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值