【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();
   
        
    }
};
相关推荐
YGGP5 分钟前
【Golang】LeetCode 1351. 统计有序矩阵中的负数
leetcode·矩阵
漫随流水7 分钟前
leetcode算法(20.有效的括号)
数据结构·算法·leetcode
如果你想拥有什么先让自己配得上拥有9 分钟前
数、自然数、整数、有理数、无理数它们的定义由来和边界划分
算法
sayang_shao17 分钟前
C++智能指针【笔记】
开发语言·c++·笔记
咸鱼Doyoung1 小时前
《commander-cpp》单头文件的、链式调用的、自动生成帮助文档的C++命令行参数解析库
c++
Xの哲學1 小时前
Linux SLUB 内存分配器深度剖析: 从设计哲学到实战调试
linux·服务器·网络·算法·边缘计算
2401_876221341 小时前
AtCoder Beginner Contest 439 - D - Kadomatsu Subsequence
c++·算法
小丁努力不焦虑1 小时前
算法期末总结题
数据结构·算法
天上飞的粉红小猪2 小时前
网络基础概念
linux·服务器·网络·c++
嵌入式进阶行者2 小时前
【算法】从数组中选取两个符合一定条件的数的算法与实例:华为OD机考双机位A卷 - 跳房子I
数据结构·c++·算法·链表