如何根据入栈序列判断可能的出栈序列

[TX面试题]

题目描述:

输入两个整数序列,其中一个序列表示栈的push(入)序列,判断另一个序列有没有可能是对应的pop(出)序列。

解答
假如输入的push序列是:1、2、3、4、5,那么3、2、5、4、1就可能是一个pop序列,但是5、3、4、1、2就不可能是它的一个pop序列了。

# 构造一个栈  
class stack:   
    def __init__(self, maxsize):
        self.top = 0
        self.lst = [None] * maxsize
        self.maxsize = maxsize

    def push(self, x):
        if self.top == self.maxsize:
            raise Exception("栈满")
        self.lst[self.top] = x
        self.top += 1

    def pop(self):
        if self.top == 0:
            raise Exception("栈空")
        self.top -= 1
        return self.lst[self.top]


lis1 = [1, 2, 3, 4, 5]
lis2 = [3, 2, 5, 4, 1]


def judge(lst1, lst2):
    s = stack(10)
    j = 0
    for v in lst1:  
        s.push(v)
        cur = s.pop()

        while cur == lst2[j]:
            j += 1
            if j > 4:
                break
            if s.top == 0:
                break
            cur = s.pop()
        s.push(cur)

    if j != 5:
        return False
    return True


print(judge(lis1, lis2))  # True

posted @ 2019-11-05 20:55  段明  阅读(686)  评论(0编辑  收藏  举报