版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sty945/article/details/82390150
前言
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)
解题思路
1.我们申请一个的新的列表stack,依次将入栈序列中的值加入
2.每次加入stack,我们需要将stack的顶部的数和出栈序列中起始index的数做对比,如果相等,我们将stack中的顶部弹出,并且出栈序列的index依次后移,重复这样的操作,直到值不相等或者出栈序列已经空了为止
3.最后,我们检验stack中是否为空,如果为空,则入栈和出栈序列是合理的,否则不是合理的
python code
#coding:utf-8
#!/bin/python
import sys
def is_pop_order(pushV, popV):
if len(pushV) == 0:
return False
stack = []
j = 0
for i in range(len(pushV)):
stack.append(pushV[i])
while j < len(popV) and stack[-1] == popV[j]:
stack.pop()
j += 1
if len(stack) == 0:
return True
else:
return False
def main():
p_push = sys.stdin.readline().strip()
p_stack = sys.stdin.readline().strip()
print(is_pop_order(p_push, p_stack))
if __name__ == '__main__':
main()
test
12345
45321
True