这是崔斯特的第一百零六篇原创文章
问题
给定一个经过编码的字符串,返回它解码后的字符串。
编码规则为: 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
|
|