LC 394栈与队列中等第 40 / 95 题

字符串解码

Decode String

栈递归
本机进度仅保存在当前浏览器

题目描述

给定一个经过编码的字符串,编码规则为 k[encoded_string],表示方括号内的字符串恰好重复 k 次。输入保证编码合法,k 为正整数,可能存在嵌套。

示例:s = "3[a2[c]]",解码为 "accaccacc"。

解题思路

  1. 嵌套结构天然适合栈:遇到 [ 时把当前串与重复次数压栈,开始构建新层。
  2. 遇到 ] 时弹栈,把刚构建的层重复 k 次接到上一层串尾。
  3. 数字可能多位,需要持续读入拼接成完整倍数;字母直接追加到当前层。

参考实现

查看参考实现Python · 建议先自行作答
def decodeString(s):
    stack = []   # [上一层字符串, 重复次数]
    cur, num = '', 0
    for ch in s:
        if ch.isdigit():
            num = num * 10 + int(ch)
        elif ch == '[':
            stack.append((cur, num))
            cur, num = '', 0
        elif ch == ']':
            prev, k = stack.pop()
            cur = prev + cur * k
        else:
            cur += ch
    return cur

复杂度与归属

时间复杂度O(输出展开规模)
空间复杂度O(n)
所属分类栈与队列
题源LeetCode 394

关联教程

返回题图鉴