通过率 55% · 提交 440 · 通过 241
小慕在开发一个文本处理工具时,遇到了一种的还原需求。现需要实现一种算法,能将一组压缩字符串还原成原始字符串,还原规则如下: 1. 字符后面加数字 N,表示重复该字符 N 次。例如:压缩内容为 A3,表示原始字符串为 AAA。 2. 中的字符串加数字 N,表示花括号中的字符串重复 N 次。例如:压缩内容为{AB}3,表示原始字符串为 ABABAB。 3. 字符加 N 和花括号后面加 N,支持任意的,包括互相嵌套。例如:压缩内容可以为{A3B1{C}3}3。
这类题属于华为 OD 机考真题方向中「200分 / 2023A」方向的高频题型,通常考察对「200分 / 2023A」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
提示:带虚线的词点一下有通俗解释。
输入一行压缩后的字符串
输出压缩前的字符串
示例 1
输入示例
{A3B1{C}3}3输出示例
AAABCCCAAABCCCAAABCCC
{A3B1{C}3}3 代表 A 字符重复 3 次,B 字符重复 1 次,花括号中的 C 字符重复 3 次,最外层花括号中的 AAABCCC 重复 3 次
示例 2
输入示例
A3
输出示例
AAA
A3 代表 A 字符重复 3 次
时间限制 1000 ms · 内存限制 128 MB
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
相关图解步骤
先看指定步骤补关键知识点,再回到本题完成标准输入输出。
把形如 {A3B1{C}3}3 的压缩串还原成原始字符串:字符 + 数字 N 表示该字符重复 N 次,{子串} + 数字 N 表示花括号内的内容整体重复 N 次,且花括号支持任意层嵌套。
本题的难点在「任意嵌套」:展开 {A3B1{C}3}3 时,必须先把最里层的 {C}3 展开成 CCC,再和 A3 → AAA、B1 → B 拼成 AAABCCC,最后整体重复 3 次。这种「先算里层、再回到外层」的结构天然对应栈——每遇到一个 { 就开一层新的"草稿纸",遇到 } 就把这层草稿展开后拼回上一层。这和 LeetCode 394「字符串解码」是同一个套路,区别只是本题的重复次数写在字符 / 花括号的后面。
1. 初始化栈 stack = [""],栈底这个字符串就是最外层(最终答案)。 2. 从左到右扫描压缩串:
{:压入一个空串,表示进入新的一层花括号;}:读出紧随其后的整段数字 N,弹出栈顶串 seg,把 seg 重复 N 次后拼到新栈顶(上一层)的末尾;ch:读出其后的整段数字 N(没有数字按重复 1 次处理),把 ch 重复 N 次拼到栈顶末尾。3. 扫描结束后,栈底字符串就是解压结果。
以题面例子验证:
A3 → AAA{AB}3 → ABABAB{A3B1{C}3}3:内层 A3 → AAA、B1 → B、{C}3 → CCC,拼成 AAABCCC,整体重复 3 次得 AAABCCCAAABCCCAAABCCC。设压缩串长度为 L、解压后字符串长度为 M、最大花括号嵌套深度为 D:
{AB}12),要连续读完整段数字,不能只取一位。} 后面的数字属于整个花括号内容,不要误当成花括号内最后一个字符的重复次数。StringBuilder,避免不可变字符串反复复制。题面只给出压缩规则,没有明确输入输出格式和非法输入约定。参考代码按最直接的方式处理:读入一行压缩串,输出一行解压结果;字符或花括号后没有数字时按重复 1 次处理;未对括号不配对等非法输入做特殊约定。若判题用例含异常输入的输出约定,需按真实用例再校准。
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有