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

【leetcode】394. 字符串解码

题目链接:力扣

给定一个经过编码的字符串,返回它解码后的字符串。

编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。

你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。

此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像 3a 或 2[4] 的输入。

 这道题……好绕啊 以至于我看题解的时候都看了好久  才明白了。

首先不可避免的是,要记录两个值,一个是字符串,一个是字符串重复的次数,即数字

考虑有嵌套[]的情况下(如示例2:3[a2[c]] )由于在遍历字符串s的过程中,会冲掉前面保存的数组和字符串,所以要选用栈来对字符串和数字进行保存

这里用到两个栈,(也有人用一个栈的 stack<pair<string, int>> st,其本质也是两个栈,为了更清楚的表达,这里我们采用两个栈)

首先定义了两个栈

stack<string> Mystack;

stack<int> Numstack;

然后以此遍历字符串s

遍历字符有四种情况
        //1、如果是数字 将数字转成整型数字等待处理
        //2、如果是字符 将字符添加到当前临时字符串中
        //3、如果是'['  将当前数字和临时字符串添加到各自栈中
        //4、如果是']'  将数字和字符栈各取出,然后拼接成新的临时字符串

    string decodeString(string s) {stack<string> Mystack;stack<int> Numstack;string res = "";string temp="";  //记录循环数for(int i=0; i<s.size();i++){if('0'<=s[i] && s[i] <='9'){temp += s[i];continue;}else if(s[i] == '['){int count = atoi(temp.c_str());Numstack.push(count);Mystack.push(res);temp = "";res = "";}else if('a'<=s[i] && s[i]<='z'){res += s[i];   }else if(s[i] == ']'){ string pre  = Mystack.top();     //当前左括号之前的字符串int n = Numstack.top();          //当前左括号之前的数字string cur;                      //当前右括号内的字符串for(int i=0; i<n;i++)cur+=res;res = pre + cur;Numstack.pop();Mystack.pop();}}return res;}

http://www.lryc.cn/news/113256.html

相关文章:

  • 系统架构设计高级技能 · 系统质量属性与架构评估(二)【系统架构设计师】
  • 魅族Pandaer手机壳
  • F5洞察2023年网络威胁,助力网络安全防护
  • 从零构建深度学习推理框架-4 框架中的算子注册机制
  • 使用vscode+ssh免密远程Linux
  • rust-异步学习
  • 【Azure】office365邮箱测试的邮箱账号因频繁连接邮箱服务器而被限制连接 引起邮箱显示异常
  • 重新登录成功和登录失败处理器
  • 【Spring】(三)Spring 使用注解存储和读取 Bean对象
  • ParallelCollectionRDD [0] isEmpty at KyuubiSparkUtil.scala:48问题解决
  • ---------------- 部署 Zookeeper 集群 ----------------
  • SpringBoot 依赖管理和自动配置---带你了解什么是版本仲裁
  • c语言每日一练(2)
  • 代码随想录第三十七天
  • Linux进程间通信--ftok
  • Spring Boot集成Mybatis-Plus
  • 梳理日常开发涉及的负载均衡
  • IEEE 754 浮点数运算
  • 阿里巴巴Java开发手册学习记录
  • 论文阅读---《Unsupervised T ransformer-Based Anomaly Detection in ECG Signals》
  • 收藏这8个好用的原型设计工具,轻松制作原型图
  • 王道计网 第四章笔记
  • C# Blazor 学习笔记(9):动态css/class绑定
  • vue3学习-Pinia状态管理
  • TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用
  • 乍得ECTN(BESC)申请流程
  • 【100天精通python】Day28:文件与IO操作_JSON文件处理
  • 配置两台数据库为主从数据库模式
  • linux允许root远程ssh登录
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK获取相机接口数据吞吐量(C++)