栈

字符串解码

中等#394Java时间 O(解码结果长度 × 嵌套深度),此 StringBuilder 写法空间 O(解码结果长度 + 嵌套深度)

题目要做什么

解码 k[内容] 形式的字符串,方括号可以嵌套;k 是正整数,普通内容由英文字母组成。

题目示例输入s = "3[a2[c]]"
题目示例输出"accaccacc"

01 为什么这样做

进入左括号时,把外层字符串和重复次数入栈,并开始收集内层内容。遇到右括号时,弹出外层状态,把内层字符串重复指定次数再拼接。

始终成立的条件

current 保存当前括号层的已解码内容;栈保存每一层尚未完成的外部状态。

02 看见算法执行

动画与代码同步

修改输入,播放自己的例子

当前使用题目示例
修改输入会改变执行过程;预期输出用于核对结果。
数组 / nums步骤 1
执行状态
本次演示输出播放到最后查看

Solution.java参考解法
1class Solution {2    public String decodeString(String s) {3        Deque<Integer> counts = new ArrayDeque<>();4        Deque<StringBuilder> prefixes = new ArrayDeque<>();5        StringBuilder current = new StringBuilder();6        int number = 0;7        for (char c : s.toCharArray()) {8            if (Character.isDigit(c)) {9                number = number * 10 + c - '0';10            } else if (c == '[') {11                counts.push(number); prefixes.push(current);12                current = new StringBuilder(); number = 0;13            } else if (c == ']') {14                StringBuilder parent = prefixes.pop();15                int repeat = counts.pop();16                for (int i = 0; i < repeat; i++) parent.append(current);17                current = parent;18            } else current.append(c);19        }20        return current.toString();21    }22}

键盘控制:A 后退 · D 前进

编程练习

↑↓ 选择↵ 打开Pagefind 全文检索