news 2026/4/3 5:44:50

⭐力扣刷题:字符串解码

作者头像

张小明

前端开发工程师

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/3/28 7:27:38

从 C 链表到 Android Looper:MessageQueue 的底层原理一条线讲透

前言&#xff1a;为什么要从 C 链表讲起&#xff1f; 很多 Android 开发者都用过 Handler / Looper / MessageQueue&#xff0c; 但一深入源码就会觉得“抽象、复杂、难以下手”。 其实问题不在 Android&#xff0c;而在于我们没把底层模型串起来。 如果你愿意退回一步&…

作者头像 李华
网站建设 2026/3/27 9:09:07

Java内存模型(JMM)详解

1. 什么是 JMM&#xff1f;JMM 的全称是 Java Memory Model&#xff0c;即 Java 内存模型。简单来说&#xff0c;JMM 是一套规范&#xff0c;它定义了在多线程环境下&#xff0c;Java 程序中的变量&#xff08;特别是共享变量&#xff09;如何被写入内存以及如何从内存中读取的…

作者头像 李华
网站建设 2026/3/20 15:09:31

WPF Behavior 实战:自定义 InvokeCommandAction 实现事件与命令解耦

在 WPF 开发中&#xff0c;MVVM&#xff08;Model-View-ViewModel&#xff09;架构已成为主流&#xff0c;其核心目标是实现视图&#xff08;View&#xff09;与业务逻辑&#xff08;ViewModel&#xff09;的解耦。而 “事件与命令的绑定” 是 MVVM 架构中的关键环节 —— 传统…

作者头像 李华
网站建设 2026/4/1 4:34:25

2026网络安全面试题大全(附答案详解)看完稳了

人人都有一个进大厂的梦想&#xff0c;而进大厂的门槛也可想而知&#xff0c;所以这里整理了一份安全大厂的面试大全&#xff0c;看完文章如果对你有帮助的话希望能够点赞收藏关注&#xff01;感谢&#xff01; 一、渗透测试面试题&#xff0c;包含大量渗透技巧 1.拿到一个待…

作者头像 李华
网站建设 2026/3/31 8:59:49

MSBuild BuildCheck框架:构建时代码质量检查的完整指南

MSBuild BuildCheck框架&#xff1a;构建时代码质量检查的完整指南 【免费下载链接】msbuild msbuild: 是 .NET Framework 的构建引擎&#xff0c;用于构建和管理 .NET 项目。适合 .NET 开发者和系统管理员使用 msbuild 构建和管理 .NET 项目。 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/3/28 23:53:17

29、国际化文本处理中的输出上下文与字体集管理

国际化文本处理中的输出上下文与字体集管理 在国际化文本处理中,涉及到多种文本渲染和字体管理的功能,下面将详细介绍相关的概念和操作。 1. 文本渲染方向与上下文依赖处理 在文本渲染过程中,有两个重要的参数影响着文本的显示方式,分别是 XNDirectionalDependentDrawi…

作者头像 李华