
这是崔斯特的第一百零六篇原创文章
问题
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: k[encoded_string],表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。
你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。 此外,你可以认为原始数据不包含数字,所有的数字只表示重复的次数 k ,例如不会出现像3a或2[4]的输入。
示例
|
|
思路
|
|
注意:
- 由于重复次数可能大于10,所以暂存数字时要适当处理,如
num*10+当前数字 - 在c++里可以直接修改拼接字符,但Java不支持运算符重载,可以借助 StringBuilder 或 StringBuffer 类。
- 用栈暂存的逻辑与递归基本一致,可以理解为用递归实现栈。
- python没有栈这种数据结构,可以用 list() 数组或双端队列 deque()
- python可以只用一个栈以元组的形式重复次数和字符串,如
(num,res)
利用栈
JAVA
|
|
Python
|
|
Go
发现一种解法:倒序遍历字符串s,如果不是[则直接入栈;遇到[时,先找出[前边的数字nums表示为k,然后找出编码字符串encodedStr,重复k次入栈,跳过数字继续遍历
|
|

惊了惊了,这么牛逼
利用递归
JAVA
将 s.length() 的值以参数传递,减少重复调用 length() 造成的时间损耗
|
|
Python
|
|
