輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)
本題的思路是建立乙個輔助棧,先挨個比較原先的序列(棧的壓入順序),再挨個比較輔助棧的序列。
# -*- coding:utf-8 -*-
class
solution
:def
__init__
(self)
: self.stack =
# 初始化輔助棧
defispoporder
(self, pushv, popv)
:# write code here
while pushv:
# 若棧的壓入序列不為空,則將壓入序列與彈出序列挨個比較
if pushv[0]
!= popv[0]
:# 若壓入序列的開頭與彈出序列的開頭不相等,則把壓入序列的開頭元素壓到輔助棧中,再比較壓入序列第二個元素與彈出序列0)
)else
:# 若壓入序列的開頭與彈出序列的開頭相等,則同時彈出
pushv.pop(0)
popv.pop(0)
while self.stack:
# 若輔助棧的元素不為空,則挨個將棧頂元素與彈出序列剩餘的開頭元素比較
if self.stack[-1
]== popv[0]
:# 若相等,則同時pop掉
self.stack.pop(
)== popv.pop(0)
else
:# 若不等,則不為壓入序列的彈出序列
return
false
return
true
# 若壓入序列與輔助棧的元素均為空,則輸出true
劍指offer 21 棧的壓入 彈出
1.題目描述輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長...
《劍指offer》21 棧的壓入 彈出序列
輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相等的 思路...
劍指offer 21棧的壓入 彈出序列
題目描述 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度...