题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
package main
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pushV int整型一维数组
* @param popV int整型一维数组
* @return bool布尔型
*/
// 判断两个序列是否符合入栈出栈的次序,我们就可以用一个栈来模拟
// 对于入栈序列,只要栈为空,序列肯定要依次入栈
// 那什么时候出来呢?自然是遇到一个元素等于当前的出栈序列的元素,那我们就放弃入栈,让它先出来
func IsPopOrder(pushV []int, popV []int) bool {
// write code here
// 辅助栈
var stack []int
// 入辅助栈的下标
j := 0
for i := 0; i < len(pushV); i++ {
// 辅助栈为空或者辅助栈顶不等于出栈数组
for j < len(pushV) && (len(stack) == 0 || stack[len(stack)-1] != popV[i]) {
stack = append(stack, pushV[j])
j++
}
// 辅助栈顶等于出栈数组
if stack[len(stack)-1] == popV[i] {
stack = stack[:len(stack)-1]
} else {
// 不匹配
return false
}
}
return true
}

