一、要求
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列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
四、思考与总结
一定要做异常值输入判断