【394.字符串解码】

目录

一、题目描述

二、算法原理

三、代码实现

cpp 复制代码
class Solution {
public:
    string decodeString(string s) 
    {
        stack<string> s1;
        s1.push("");
        stack<int> s2;
        int i = 0, n = s.size();
        while (i < n)
        {
            //1.如果是数字入数字栈
            if (s[i] >= '0' && s[i] <= '9')
            {
                int sum = 0;
                while (s[i] >= '0' && s[i] <= '9')
                {
                    int val = s[i] - '0';
                    sum = sum * 10 + val;
                    i++;
                }
                s2.push(sum);
            }

            //2.如果是[ 统计后面的字符串入字符串栈
            else if (s[i] == '[')
            {
                string str;
                i++;
                while (s[i] >= 'a' && s[i] <= 'z') str += s[i++];
                s1.push(str);
            }

            //3.如果是] 解码后入字符栈顶的子串后面
            else if (s[i] == ']')
            {
                int times = s2.top();
                s2.pop();
                string temp = s1.top();
                s1.pop();
                while (times--) s1.top() += temp;
                i++;
            }

            //4.如果是字符 把字符串入栈顶的子串后面
            else if (s[i] >= 'a' && s[i] <= 'z')
            {
                string str;
                while (s[i] >= 'a' && s[i] <= 'z') str += s[i++];
                if (str.size() > 0) s1.top() += str;
            }
        }
        return s1.top();
   
        
    }
};
相关推荐
JieE2121 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack201 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树1 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
vivo互联网技术2 天前
CVPR 2026 | 全新强化学习框架 BeautyGRPO:重塑真实人像
算法·大模型·cvpr·影像
Darling噜啦啦2 天前
列表转树算法深度解析:从 Map 到 Reduce 的两种实现,面试高频考点
数据结构·算法·面试
clint4562 天前
C++进阶(1)——前景提要
c++
用户497863050732 天前
(一)小红的数组操作
算法·编程语言