def decoder(s:str) -> str:
n = len(s) #{A3B1{C}3}3
bracket_pos = []
stack = [] #不是数字都入栈
def repeat(stack,pos,num):
#弹栈次数
m = len(stack)-pos
repeat_list = []
for _ in range(m):
repeat_list.append(stack.pop())
stack.append(''.join(repeat_list)*num)
for i in range(n):
tmp =s[i]
if tmp == '{':
stack.append(tmp)
#记录左括号在栈中的位置,不是在字符串中的位置
bracket_pos.append(len(stack)-1)
elif tmp <= '9' and tmp > '0':
num = int(tmp)
if stack[-1] == '}':
pos = bracket_pos.pop()
stack.pop(pos)
stack.pop()
repeat(stack,pos,num)
else:
repeat(stack,len(stack)-1,num)
else:
stack.append(tmp)
ans = ''.join(stack)
return ans
s = '{A3B1{C}3}3'
print(decoder(s))
类似题目:报文解压缩
思路:这个即第一题的倒过来,即倒叙