爱嘉牛LA

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
# 描述
# 给出一个字符串,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)

 

posted on 2019-01-06 18:13  爱嘉牛LA  阅读(351)  评论(0)    收藏  举报