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