题目描述
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。
注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则视为是一个栈的压入、弹出序列。
样例
输入:[1,2,3,4,5]
[4,5,3,2,1]
输出:true
goalng 代码
func isPopOrder(pushV []int , popV []int) bool{
if len(pushV) != len(popV) {
return false
}
//模拟栈
var temp = make([]int,100)
var top = -1
//序号 i:进栈 j:出栈
var i = 0
var j = 0
for j < len(popV) {
//空栈 数不相同
if top == -1 || i < len(pushV) && temp[top] != popV[j] {
top++
temp[top] = pushV[i]
i++
//数相同
}else if temp[top] == popV[j]{
top--
j++
}else{
return false
}
}
return true
}