当前位置: 首页 > news >正文

【LeetCode】394. 字符串解码

题目

394. 字符串解码

思路

创建两个栈,一个栈存储数字,另一个栈存储字符串。如果当前的字符为数位,解析出一个数字并进栈,如果当前的字符为字母或者左括号,直接进栈,如果当前的字符为右括号,开始出栈,一直到左括号出栈,出栈序列反转后拼接成一个字符串,此时取出栈顶的数字,根据这个次数和字符串构造出新的字符串,重复如上操作,最终将栈中的元素按照从栈底到栈顶的顺序拼接起来。

代码

class Solution {
public:
    string decodeString(string s)
    {
        stack<int> nums; // 用于存储数字
        stack<string> st; // 用于存储字符串
        string tmp; // 临时字符串
        int num = 0; // 当前数字
        int n = s.size(); // 字符串长度
    for (int i = 0; i < n; i++) 
    {
        if (isdigit(s[i])) 
        {
            num = 10 * num + s[i] - '0'; // 解析数字
        } 
        else if (isalpha(s[i])) 
        {
            tmp.push_back(s[i]); // 解析字母
        } 
        else if (s[i] == '[') 
        {
            nums.push(num); // 数字入栈
            num = 0; // 重置数字
            st.push(tmp); // 字符串入栈
            tmp.clear(); // 清空临时字符串
        } 
        else if (s[i] == ']') 
        {
            int cnt = nums.top(); // 获取栈顶数字
            nums.pop(); // 数字出栈
            string str = tmp; // 临时字符串
            for (int j = 0; j < cnt; j++) 
            {
                st.top() += str; // 重复字符串
            }
            tmp = st.top(); // 更新临时字符串
            st.pop(); // 字符串出栈
        }
    }
    return tmp; // 返回解码后的字符串
    }
};
http://www.dtcms.com/a/18632.html

相关文章:

  • Windows中指定路径安装DockerDesktop
  • 02、QLExpress从入门到放弃,相关API和文档
  • Electron:使用electron-react-boilerplate创建一个react + electron的项目
  • 回顾Golang的Channel与Select第一篇
  • Anaconda +Jupyter Notebook安装(2025最新版)
  • 【C】初阶数据结构5 -- 栈
  • 【Python爬虫(1)】专栏开篇:夯实Python基础
  • KVM虚拟化快速入门,最佳的开源可商用虚拟化平台
  • 详解Windows 系统上部署 Spring Boot + MyBatis + MySQL 项目
  • hyperf 异步队列
  • 打破AI黑盒,拥抱开源力量:基于openGauss+DeepSeek的本地知识库,打造你的专属AI助手!
  • go语言简单快速的按顺序遍历kv结构(map)
  • 网络工程师 (32)TRUNK
  • c++20新特性
  • B+Tree在mysql中的使用
  • 17.推荐系统的在线学习与实时更新
  • FANUC机器人示教器中如何显示或关闭寄存器或IO的注释信息?
  • 缓存穿透问题及解决方案
  • 《刚刚问世》系列初窥篇-Java+Playwright自动化测试-23- 操作鼠标拖拽 - 番外篇(详细教程)
  • Windows安装 WSL2、Ubuntu 、docker(详细步骤 , 弃用 docker desktop )
  • Redis 数据类型 Hash 哈希
  • 海康威视人脸门禁对接开发准备篇
  • 【第4章:循环神经网络(RNN)与长短时记忆网络(LSTM)— 4.3 RNN与LSTM在自然语言处理中的应用案例】
  • docker快速部署oracle11g
  • Unity3D 移动端 CPU 性能调优详解
  • Oracle常用导元数据方法
  • cap4:YoloV5的TensorRT部署指南(python版)
  • Unity 卡死排查方法(游戏死循环、打包卡死)
  • 批量查询linux下可执行程序缺少的依赖
  • ollama离线环境部署deepseek及对话网站开发