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
     }
}

 

posted @ 2021-04-08 22:39  zqlucky  阅读(59)  评论(0编辑  收藏  举报