題目描述
輸入兩個整數序列,第一個序清單示棧的壓入順序,請判斷第二個序列是否為該棧的彈出順序。假設壓入棧的所有數字均不相等。例如序列1,2,3,4,5是某棧的壓入順序,序列4,5,3,2,1是該壓棧序列對應的一個彈出序列,但4,3,5,1,2就不可能是該壓棧序列的彈出序列。
要判斷一個序列是不是另一個序列的彈出序列,首先我們得知道棧的特點是fifo,其次,由于壓入序列是确定的(這裡指的“确定”是說相對位置是确定的),就是說壓入序列之間的元素可能會經曆壓入後馬上被彈出的情況。具體思路是:根據彈出序列的第一個值,判斷在該元素之前被壓入棧的所有元素,并對壓入棧的棧頂元素與彈出序列的第一個值進行比較,如果相等,則繼續判斷下一個元素,繼續判斷該元素之前需要壓入棧中的所有元素,仍然進行比較,如果相等,繼續判斷下一個元素;如果所有的元素都被壓入棧中,但是兩者仍然不相等,說明彈出序列不可能是原序列的彈出序列。這樣一直判斷直到彈出序列的最後一個元素。
那麼根據這種思路,可以寫出如下代碼(已被牛客ac):