劍指offer 第21題 棧的壓入,彈出序列

2021-09-09 07:16:16 字數 1273 閱讀 1581

輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。(注意:這兩個序列的長度是相等的)

利用輔助棧:

初始彈出index=0,從壓入順序棧遍歷,如果不等於彈出順序棧index處的值,就壓入輔助棧,如果相等,就把index+1,最後比較輔助棧和彈出棧從index到最後的壓入彈出順序即可。

# -*- coding:utf-8 -*-

class solution:

def ispoporder(self, pushv, popv):

# write code here

# 輔助棧思路

help_stack =

pop_index = 0

for i in pushv:

if i != popv[pop_index]:

else:

pop_index += 1

return help_stack[::-1] == popv[pop_index:]

從棧的定義出發,先入後出,如果有先入先出的就返回false,就是找到壓入為12,彈出也是12的。但是壓入的最後乙個元素可能會存在順序一致的情況,需要排除。

# -*- coding:utf-8 -*-

class solution:

def ispoporder(self, pushv, popv):

# write code here

#可能中間就往出彈

if not pushv:

return true

n = len(pushv)

if n == 1:

if pushv[0] != popv[0]:

return false

else:

return true

dic = {}

for i in range(n - 1):

dic[pushv[i]] = pushv[i + 1]

dic[pushv[-1]] = none

for j in range(n - 1, 0, -1):

if popv[j] != pushv[-1]:

if dic[popv[j - 1]] == popv[j]:

return false

return true

劍指Offer 程式設計題21 棧的壓入 彈出序列

題目 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長度是相...

劍指offer 21 棧的壓入 彈出

1.題目描述輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩個序列的長...

21 棧的壓入 彈出序列(劍指offer)

21.棧的壓入 彈出序列 輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的乙個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。注意 這兩...