剑指Offer 31. 栈的压入、弹出序列
题目链接: 剑指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
}