【Java】棧的壓入、彈出序列

題目描述

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

解題思路

    /*
     * 實現思路如下:
     *         1、定義一個棧,來進行測試;
     *         2、對入棧序列逐一入棧,入棧過程中與出棧序列進行比較;
     *         3、如果相等,則出棧;出棧序列指針後移。如果不等,繼續第2步;
     *         4、直至入棧序列遍歷完成。
     *         對於返回值,如果不是出棧序列,則棧不會爲空;只有正確時,棧纔會爲空。
     */

在這裏插入圖片描述

具體實現

    public static boolean isPopOrder(int [] pushA,int [] popA) {

        Stack<Integer> assistant = new Stack<>();
        int index = 0;
        for(int i = 0; i < pushA.length; i++) {
            assistant.push(pushA[i]);           
            while(!assistant.isEmpty() && assistant.peek() == popA[index]){
                assistant.pop();
                index++;                
}        
        }       
        return assistant.isEmpty();
    }

感謝大家!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章