【Leetcode Daily】394字符串解码
题目浅析
想查看原题可以点击题目链接。
简单地说,就是给一个字符串,对于其中 3[*] 的部分,就替换成 *** 这样把中括号内部重复 3 遍,前面的数字部分可以为 1-300 的任意整数。
思路分享
一开始的思路是对于[]的内部直接延长为数字倍数,但发现这个思路不太好应对多层嵌套。
于是,如果用栈记录每层的字符情况以及要乘的数字倍数情况,然后在括号结束时计算倍数,就可以解决嵌套的问题。
不过这里记录一个 Python 有趣的知识,对于
l = ["1", "2"]
这样的列表,用l[-1] += l.pop()
的结果是什么呢?这个代码的原本目标是去除最后的一个元素,并将内容与前一个字符串融合,即目标答案是 [“12”]。但实际上却是 [“22”]。原因是虽然表达式是右到左来解析,但左边的 l[-1] 的“值”在式子一开始就是固定的,十分微妙,不知道算 bug 还是什么。(3.12.2)只能说各位实际上写的时候,尽量避免 -1 和 pop 这种比较相关的操作同时运行。灵神的题解一如既往的神啊,参考题解与灵神的栈思路类似
代码解答(强烈建议自行解答后再看)
- 参考题解
1 | class Solution: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 LuYaoQi's Blogs!