LeetCode刷题实战394:字符串解码
示例
示例 1:
输入:s = "3[a]2[bc]"
输出:"aaabcbc"
示例 2:
输入:s = "3[a2[c]]"
输出:"accaccacc"
示例 3:
输入:s = "2[abc]3[cd]ef"
输出:"abcabccdcdcdef"
示例 4:
输入:s = "abc3[cd]xyz"
输出:"abccdcdcdxyz"
解题
class Solution:
def decodeString(self, s: str) -> str:
#思路:这种类型的题,一种思路是栈,一种思路是递归。
#本解法用的是栈,当遇到[时,我们将数字压入栈中,并开始用cur_str记录中括号里的字母,如遇到],就将之前的数字出栈并与当前的cur_str相乘。
mul, cur_str = 0, ''
stack = []
for c in s:
if c == '[':
stack.append((mul, cur_str))
mul, cur_str = 0, ''
elif c == ']':
n, pre = stack.pop()
cur_str = pre + n * cur_str
elif '0' <= c <= '9':
mul = 10 * mul + int(c)
else: #字母
cur_str += c
return cur_str
LeetCode刷题实战381:O(1) 时间插入、删除和获取随机元素
