如何根据入栈序列判断可能的出栈序列
[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
最近才从csdn迁徙到博客园,欢迎关注交流!
代码改变世界!