輸入兩個整數序列,第乙個序列表示棧的壓入順序,請判斷第二個序列是否可能為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列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就不可能是該壓棧序列的彈出序列。注意 這兩...