# 题目链接
# 题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。
例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。
# 解题思路
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
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19