ZOJ1004递归实现堆栈

import sys

 
stack = []

operate = []

str_a = ''

str_b = ''

 
def dfs(index_a, index_b):

    if index_a == len(str_a) and index_b == len(str_b):

        for oper in operate:

            sys.stdout.write(oper)

            sys.stdout.write(' ')

        sys.stdout.write('\n')    
        return

    if index_a < len(str_a):

        stack.append(str_a[index_a])

        operate.append('i')

        dfs(index_a   1, index_b)

        stack.pop()

        operate.pop()

    if len(stack) > 0 and stack[-1] == str_b[index_b]:

        str_pop = stack.pop()

        operate.append('o')

        dfs(index_a, index_b   1)

        stack.append(str_pop)

        operate.pop()

if __name__ == '__main__':

    i = 0

    is_first = True

    for line in sys.stdin:

        line = line.split('\n')[0]

        if i == 0:

            str_a = line

        else:

            str_b = line

            if is_first:

                print '['

                is_first = False

            else:

                print '\n['

            if len(str_a) == len(str_b):

                stack = []

                operate = []

                dfs(0, 0)

            sys.stdout.write(']')

        i = (i   1) % 2

整体思想就是用递归来模拟栈操作,深度优先。需要注意格式的问题,最后一个“]”之后没有回车,另外每行输出之后都有个空格。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容