JZ21 棧的壓入、彈出序列

棧的壓入、彈出序列

輸入兩個整數序列,第一個序列表示棧的壓入順序,請判斷第二個序列是否爲該棧的彈出順序。假設壓入棧的所有數字均不相等。

 

解題思路
1,用go語言slice建一個輔助棧,來順序添加壓入序列
2,每次添加一個元素,去跟彈出序列比較,若不同,繼續添加。若相同,則彈出,繼續拿新建棧的棧頂元素去跟彈出序列去比較,循環即可。
3,最後,若輔助棧中沒有元素,則返回真,反之。

func validateStackSequences(pushed []int, popped []int) bool {
     //建一個輔助棧
     stack := make([]int,0)
     //將push順序壓入輔助棧中,如果棧頂元素==pop序列中下一個出現的值,則彈出
     i := 0 
     for _,value := range pushed{
         stack = append(stack,value)
         for len(stack) != 0 && stack[len(stack)-1] == popped[i]{
             stack = stack[:len(stack)-1]
             i++
         }
     }
     //總結判斷
     if len(stack) == 0{
         return true
     }else{
         return false
     }
}

 

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