劍指offer-棧的壓入、彈出序列

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

# -*- coding:utf-8 -*-
class Solution:
    def IsPopOrder(self, pushV, popV):
        # write code here
        stack = []
        j = 0
        for i in pushV:
            stack.append(i)
            while stack:
                if stack and stack[-1] == popV[j]:
                    stack.pop()
                    j += 1
                else:
                    break
        if stack:
            return False
        else:
            return True

思路和咱們人腦計算的思路是一致的spa

  • 創建一個輔助棧 stack = [];
  • 將壓入序列的第一個數壓入輔助棧,判斷輔助棧頂的元素是否和彈出序列的第一個數(當前數)相同,若是相同的話輔助棧彈出該相同數(說明能夠彈出序列的第一個數是對的),而後彈出序列移到第二個數(當前數);
  • 若是不一樣繼續將壓入序列的數入輔助棧,再次比較輔助棧頂元素是否和彈出序列當前數相同。
  • 直到壓入序列中的數所有入輔助棧。
  • 若是輔助棧stack中還有元素,說明不是彈出序列,若是沒有說明彈出序列正確。
相關文章
相關標籤/搜索