news 2026/6/10 2:05:32

⭐力扣刷题:字符串解码

作者头像

张小明

前端开发工程师

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/6/9 23:16:41

应急响应实战:服务器被入侵后的处置步骤(转行安全运维必备)

应急响应实战&#xff1a;服务器被入侵后的处置步骤&#xff08;转行安全运维必备&#xff09; 引言 我刚转行安全运维时&#xff0c;第一次处理服务器入侵 —— 看到服务器 CPU 占用 100%、满屏陌生进程&#xff0c;完全不知道从哪下手。后来才明白&#xff1a;应急响应有标准…

作者头像 李华
网站建设 2026/6/10 14:40:42

1、掌握 Linux 网络管理:从入门到实践

掌握 Linux 网络管理:从入门到实践 一、学习目标与适用人群 对于已经掌握 Linux 基础知识,想要学习如何管理基于 Linux 的网络或提升相关技能的用户来说,有一个很好的学习方向。通过一系列学习,目标是从初学者或中级 Linux 用户成长为能够管理和支持实际 Linux 网络的专业…

作者头像 李华
网站建设 2026/6/9 19:21:10

linux提升权限命令提示符,win10如何直接使用命令提示符提高管理员权限?

原标题&#xff1a;win10如何直接使用命令提示符提高管理员权限? 在使用普通的命令提示符时&#xff0c;如果遇到需要管理员权限的操作&#xff0c;往往需要重新打开一个具有管理员权限的命令提示符页面进行操作。 而在Linux操作系统中&#xff0c;可以通过输入su来获取系统最…

作者头像 李华
网站建设 2026/6/10 16:29:44

36、国际化文本处理与客户端间通信功能解析

国际化文本处理与客户端间通信功能解析 1. 国际化文本处理 在国际化文本处理方面,有几个关键的功能和概念需要了解。 1.1 输入方法相关 输入方法架构对客户端是透明的,但客户端需要遵循一些约定以确保正常工作。 客户端约定 :表现良好的客户端(或工具包)应首先查询输…

作者头像 李华