题目描述
给定两个整数序列,第一个序列为压栈顺序,判断第二个序列是否是第一个序列的出栈顺序。(两个序列长度相等)
input: 1 2 3 4 5 , 4 3 5 1 2
output: False
解题思路
直接模拟。用一个list模拟进栈操作,进栈的同时,将当前栈顶元素与出栈序列比较,若相同,弹出栈顶元素,出栈次数加1;最后统计出栈次数,若总次数和序列长度相等,结果为True,否则为False.
参考代码
def stack_seri(list_a, list_b):
temp = []
count = 0
for a in list_a:
temp.append(a)
while len(temp) != 0 and temp[-1] == list_b[count]:
temp.pop()
count += 1
if count == len(list_a):
return True
return False
总结
1.一开始想的是进栈同时将该元素与出栈序列比较,相同则先弹出,否则直接模拟下一个元素进栈。后来手动执行了一下发现问题。。。先比较的不是即将进栈的元素,而应该是当前栈顶元素。
2.注意while 和 if的区别。