剑指offer14 — 栈的压入弹出序列
题目
输入两个整数序列,第一个序列表示栈的压入序列,请判断第二个序列是否可能成为该栈的弹出序列。假设压入栈的所有数字均不相等,例如序列1,2,3,4,5是某栈的压入序列,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该栈序列的弹出序列。
分析
新建一个列表,先逐个压入pushV中的元素,并逐个判断下一个是压入还是弹出。弹出的条件为:压入栈的顶部和弹出栈的index位置的数据是否相等,index首先赋值为0,确认弹出一个数据,则index++一次。如果压完了所有pushV的元素并判断后,该新建列表为空,则说明该弹出序列是一个可能的弹出序列,否则则不是。
解
class Solution:
def IsPopOrder(self,pushV,popV):
if pushV==[] or len(pushV) != len(popV):
return None
stack=[]
index=0
for item in pushV:
stack.append(item)
# 对前面的数据进行判断,是否需要弹出
while stack and stack[-1]==popV[index]:
stack.pop()
index+=1
return True if stack=[] else False