剑指Offer 31. 栈的压入、弹出序列

发布时间 2023-08-27 20:45:33作者: 小星code

题目链接: 剑指Offer 31. 栈的压入、弹出序列

题目描述:

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。
假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。

解法思路:

  • 本题直接进行入栈模拟即可;

  • 首先根据给出的pushed数组,依次模拟入栈操作,如果当前入栈的元素 等于 poped元素的栈顶(第一个值)时,则立即将当前元素出栈,同时poped也进行出栈操作

  • 当遍历完,如果栈空则为true,否则为false

代码:

```golang
func validateStackSequences(pushed []int, popped []int) bool {
  
  var s []int
  for _, v := range pushed{
    s = append(s,v)
    for len(s) != 0 && s[len(s)-1] == popped[0] {  //注意这里是for循环,不是if
      s = s[:len(s)-1]
      popped = popped[1:]
    }
  }
  return len(s)==0

}