題解 | #棧的壓入、彈出序列#
棧的壓入、彈出序列
http://fangfengwang8.cn/practice/d77d11405cc7470d82554cb392585106
# 代碼中的類名、方法名、參數(shù)名已經指定,請勿修改,直接返回方法規(guī)定的值即可
#
#
# @param pushV int整型一維數(shù)組
# @param popV int整型一維數(shù)組
# @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):#如果出棧序列還有元素則繼續(xù)循環(huán)
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彈出,并繼續(xù)下一次循環(huán)的判斷
new_stack.remove(x)
else:
return False
else:
break#否則因為出棧序列的剩余第一個元素不在,則繼續(xù)入棧即可
if(len(new_stack) == 0 and len(popV) == 0):#如果模擬的堆棧和出棧序列都清空,則返回True,否則返回False
return True
else:
return False