题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
http://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pushV int整型一维数组
# @param popV int整型一维数组
# @return bool布尔型
#
class Solution:
def IsPopOrder(self , pushV: List[int], popV: List[int]) -> bool:
# write code here
new_stack = []#模拟栈的压入和弹出过程
for i in pushV:
new_stack.append(i)#碰到一个入栈的序列,首先入栈一次
while(len(popV) != 0):#如果出栈序列还有元素则继续循环
if(popV[0] in new_stack):#判断出栈序列剩余的第一个元素是否在栈内,如果在是不是栈顶,是则弹出,不是则直接False
if(popV[0] == new_stack[len(new_stack)-1]):
x = new_stack[len(new_stack)-1]
popV.remove(x)#将X弹出,并继续下一次循环的判断
new_stack.remove(x)
else:
return False
else:
break#否则因为出栈序列的剩余第一个元素不在,则继续入栈即可
if(len(new_stack) == 0 and len(popV) == 0):#如果模拟的堆栈和出栈序列都清空,则返回True,否则返回False
return True
else:
return False