剑指offer第31题:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列是否为栈的弹出序列。
# _*_encoding:utf-8 _*_
class Solution:
def is_stack_push_list(self, list1, list2):
length1 = len(list1)
length2 = len(list2)
if length1 != length2 or length1 == 0:
return False
p1_begin = 0
p2_begin = 0
# 模拟出入栈
stack = []
while True:
number = list1[p1_begin]
# 入栈
stack.append(number)
while stack and stack[-1] == list2[p2_begin]:
# 当入栈的元素与list2的当前元素相同,则出栈,并且p2指向下一个
stack.pop()
p2_begin += 1
if p1_begin == length1-1:
# 当p1指向最后一个元素时,模拟出入栈已经结束,如果list2表示正确的出栈顺序,那么stack应该为空
if stack:
return False
else:
return True
p1_begin += 1