news 2026/8/7 22:56:59

⭐力扣刷题:字符串解码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
⭐力扣刷题:字符串解码

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

编码规则为: 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};
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/6 4:51:46

5个必学技巧!让你的点云可视化性能提升200%

5个必学技巧&#xff01;让你的点云可视化性能提升200% 【免费下载链接】rerun Visualize streams of multimodal data. Fast, easy to use, and simple to integrate. Built in Rust using egui. 项目地址: https://gitcode.com/GitHub_Trending/re/rerun 你是否在加载…

作者头像 李华
网站建设 2026/8/7 15:27:53

轻量级图表库uPlot完全指南:解锁高性能可视化新境界

轻量级图表库uPlot完全指南&#xff1a;解锁高性能可视化新境界 【免费下载链接】uPlot &#x1f4c8; A small, fast chart for time series, lines, areas, ohlc & bars 项目地址: https://gitcode.com/gh_mirrors/up/uPlot 想要在网页中流畅展示大量时间序列数据…

作者头像 李华
网站建设 2026/8/7 0:01:37

35、本地化与国际化文本函数详解

本地化与国际化文本函数详解 1. 字符串转换操作 在处理输入字符串时,根据 XIMStringConversionOperation 的不同类型,客户端的操作也有所不同: - 当 XIMStringConversionOperation 为 XIMStringConversionSubstitution 时,客户端必须从自身缓冲区中删除待转换的字…

作者头像 李华
网站建设 2026/8/6 20:51:24

AdGuard Home配置优化实战指南:从新手到专家的5个关键步骤

AdGuard Home配置优化实战指南&#xff1a;从新手到专家的5个关键步骤 【免费下载链接】AdGuardHome Network-wide ads & trackers blocking DNS server 项目地址: https://gitcode.com/gh_mirrors/ad/AdGuardHome 你是否遇到过AdGuard Home安装后广告拦截效果不佳&…

作者头像 李华
网站建设 2026/8/7 5:39:02

3步上手FLAN-T5 XL:从零开始掌握强大语言模型

3步上手FLAN-T5 XL&#xff1a;从零开始掌握强大语言模型 【免费下载链接】flan-t5-xl 项目地址: https://ai.gitcode.com/hf_mirrors/google/flan-t5-xl FLAN-T5 XL是Google推出的先进语言模型&#xff0c;基于T5架构进行指令微调&#xff0c;在文本生成、翻译、问答等…

作者头像 李华
网站建设 2026/8/7 12:47:31

5分钟快速上手:awesome-godot项目带你玩转游戏开发

5分钟快速上手&#xff1a;awesome-godot项目带你玩转游戏开发 【免费下载链接】awesome-godot A curated list of free/libre plugins, scripts and add-ons for Godot 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-godot 想要轻松入门游戏开发却不知从何开始…

作者头像 李华