輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。
例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
整體是對三個棧來操作 :
對於pop序列來說, 我們只需要對於進行index的從前往後遍歷和對比. 同時對比stack 和 push序列.
對於push序列來說, 我們需要對其不斷的壓入輔助棧stack,同時元素是進行的pop( ), 當push為空了, 是判斷迴圈結束的條件. 元素都已經壓入輔助棧了,但是輔助棧的棧頂元素跟pop序列的棧頂元素不一致, 直接判斷為false.
對於輔助棧來說, 一是需要棧頂跟pop元素比較; 二是需要不斷的將push的元素壓入, 壓入的條件是push和pop序列的對比
class
solution
:def
ispoporder
(self,pushv, popv)
:
length =
len(pushv)
if length ==1:
return pushv == popv
stack =
if pushv and popv and length >0:
x =0while x <
len(popv)
:# 彈出的元素
if stack and stack[-1
]== popv[x]
:# 檢查棧頂元素是否相等
stack.pop(-1
) x +=
1continue
# 相等就繼續下乙個彈出元素
while pushv and pushv[0]
!= popv[x]
:# 如果彈出元素與壓入序列中的頭元素不同,
# 那麼將頭元素壓入,直到找到第乙個相等的元素0)
)if pushv and pushv[0]
== popv[x]
: pushv.pop(0)
x +=1if
not pushv and stack[-1
]!=popv[x]
:#如果push序列空了, 當前的當前pop序列的元素與輔助棧的頂元素不相等
#直接返回false
return
false
return
not stack
刷題筆記39 棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 ...
演算法題 棧的壓入,彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 思路...
棧的壓入彈出序列
題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓棧序列,序列4,5,3,2,1是該棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...