20180722剑指offer题22——栈的压入、弹出序列

一、要求

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,
但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)

二、思路及代码

建立一个辅助栈,对压入序列用for压入,每压入一个数,判断栈顶元素和弹出序列第一个是否相同,同就pop至不同,不同就继续压入。最后辅助栈为空就True,否则False。

def solution(A,B):
    if A==[]or B==[]:
        return False
    stack=[]
    for i in A:
        stack.append(i)
        while stack and stack[-1]==B[0]:#stack的判断不能省去,不然会报错
            stack.pop()
            B.pop(0)
    if stack==[]:#或者if len(stack)==0
        return True
    else:
        return False


pushV = [1, 2, 3, 4, 5]
popV = [4, 5, 3, 2, 1]
popVF = [4, 5, 2, 1, 3]
print (solution(pushV,popV))
print(solution(pushV,popVF))

三、运行结果

True
False

四、思考与总结

一定要做异常值输入判断

猜你喜欢

转载自blog.csdn.net/weixin_41819299/article/details/81152619