# 描述
# 给出一个字符串,2[a]3[c] 或者 3[d2[cb]] 输出
# aaccc, 和 dcbcbdcbcbdcbcb
# 说明:面试题
# 采用两个栈来处理
# 1.第一个栈存入字符串,然后第一个栈出栈,如果判断"[",则把第二个栈元素出栈,直到碰到']'
# 2.出栈的所有元素存在一个临时变量中,这时候出栈第一个栈的栈顶(这时肯定是个数字,不是数字也可以,这里假设为是数字)
# 3.根据数字,复制多份1步中的临时变量,把复制后的结果存入第二个栈
# 4.重复1~3,最后输出第二个栈即可
def f(str):
stack_a = []
stack_b = []
return_str = ''
for c in str:
stack_a.append(c)
print(stack_a)
while stack_a:
pop_a = stack_a.pop()
if pop_a == ']':
stack_b.append(pop_a)
elif pop_a == '[':
temp = ''
pop_b = stack_b.pop()
while pop_b != ']' and stack_b:
temp += pop_b
pop_b = stack_b.pop()
copy_temp = ''
for i in range(0, int(stack_a.pop())):
copy_temp += temp
stack_b.append(copy_temp)
else:
stack_b.append(pop_a)
while stack_b:
c = stack_b.pop()
if c not in ['[', ']']:
return_str += c
print(return_str)
if __name__ == '__main__':
# str = '2[a]3[c]'
str = '3[d2[cb]]'
f(str)