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

⭐力扣刷题:字符串解码

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

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

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

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

测试用例保证输出的长度不会超过 105。

示例 1:

输入:s = “3[a]2[bc]”
输出:“aaabcbc”

示例 2:

输入:s = “3[a2[c]]”
输出:“accaccacc”

示例 3:

输入:s = “2[abc]3[cd]ef”
输出:“abcabccdcdcdef”

示例 4:

输入:s = “abc3[cd]xyz”
输出:“abccdcdcdxyz”

解析:
这道题的本质在于使用两个栈来模拟递归的过程,遇到左括号时保存当前状态,遇到右括号时恢复状态并计算。

第一阶段:准备阶段
准备两个空栈:一个用于存储数字(重复次数),一个用于存储字符串
初始化当前数字为0,当前结果字符串为空

第二阶段:遍历解析
从左到右扫描字符串的每个字符,根据字符类型采取不同操作:

当遇到数字时:
将当前数字左移一位(相当于十进制乘以10),然后加上新数字

这样可以正确处理多位数字,如"23"表示23次重复

当遇到左括号"["时:
这标志着一个新的嵌套层开始
将当前已构建的字符串压入字符串栈保存
将当前累计的数字压入数字栈保存
关键操作:清空当前数字和当前字符串,为内层嵌套做准备

当遇到右括号"]"时:
这标志着当前嵌套层结束
从数字栈顶弹出重复次数
从字符串栈顶弹出之前保存的字符串
将当前字符串重复指定次数,然后拼接到弹出的字符串后面
这个结果成为新的当前字符串

当遇到普通字母时:
直接追加到当前字符串末尾

第三阶段:状态管理的关键
这种算法的精妙之处在于状态的保存与恢复:
每次进入新的括号层级时,把外层状态存入栈中,自己从空白开始
每次退出当前层级时,从栈中取出外层状态,合并当前结果
这模仿了递归函数的调用和返回过程

具体代码:

/** * @param {string} s * @return {string} */vardecodeString=function(s){letnumstack=[]letstrstack=[]letnum=0letres=''for(leti=0;i<s.length;i++){if(!isNaN(s[i])){num=num*10+Number(s[i])}elseif(s[i]==='['){strstack.push(res)numstack.push(num)num=0res=''}elseif(s[i]===']'){constmulti=numstack.pop()res=strstack.pop()+res.repeat(multi)}else{res+=s[i]}}returnres};
http://www.cnnetsun.cn/news/82949.html

相关文章:

  • 5个必学技巧!让你的点云可视化性能提升200%
  • 轻量级图表库uPlot完全指南:解锁高性能可视化新境界
  • 35、本地化与国际化文本函数详解
  • AdGuard Home配置优化实战指南:从新手到专家的5个关键步骤
  • 3步上手FLAN-T5 XL:从零开始掌握强大语言模型
  • 5分钟快速上手:awesome-godot项目带你玩转游戏开发
  • 深入Linux实时调度:5个关键机制彻底改变你的应用响应速度
  • MATLAB中实现图像超分辨率
  • Wechaty v1.20.2深度解析:智能对话机器人的企业级实践指南
  • Moonlight安卓串流终极指南:手机畅玩PC游戏的完整教程
  • 强化学习第六课 —— SAC:熵驱动的更智能探索
  • VeraCrypt加密存储实战:5步构建企业级数据安全防线
  • 9 个专科生开题演讲稿工具,AI降AI率软件推荐
  • Flutter Dynamic Widget 终极指南:用JSON构建动态UI的完整教程
  • MacBook 那些“偷偷摸摸”的隐私设置|2026 你现在就该改(真的)
  • 9个降AI率工具推荐!专科生开题报告必备
  • 终极解决方案:5步彻底攻克技术项目软依赖管理难题
  • Orleans告警革命:5大智能策略终结运维疲劳
  • 西安最新 955 公司名单
  • 微信不小心违规被封,好友辅助验证流程怎样?
  • 2024 FRC机器人比赛元素检测:游戏部件、防撞条、April标签与场地识别指南
  • 这款小工具,彻底治好了我的Mac文件管理焦虑
  • 智能助手性能评估:5大关键维度与实战指南
  • 从零开始搭建个人AI助手:Anything-LLM + Ollama下载配置全记录
  • 大模型内存优化技术:从碎片化到高效管理,性能提升45%的实战指南
  • 上海、北京、深圳跻身全球GDP前十城市;奥动新能源向港交所递交上市申请 | 美通社一周热点简体中文稿
  • 前端工程化实践:打包工具的选择与思考
  • Flutter跨平台打包实战:从配置冲突到一键部署的完整解决方案
  • LangChain表达式语言(LCEL)如何扩展Anything-LLM功能?
  • 33、Unix系统下SMB/CIFS文件共享访问指南