刷題 棧的壓入 彈出序列

2021-08-28 05:43:59 字數 1293 閱讀 2529

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。

例如序列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就不可能是該壓棧序列的彈出序列。解答 可以用乙個輔助的棧來儲存入...