输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
假设压入栈的所有数字均不相等。
例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 是该压栈序列对应的一个弹出序列,但 4,3,5,1,2 就不可能是该压栈序列的弹出序列。
注意:若两个序列长度不等则视为并不是一个栈的压入、弹出序列。若两个序列都为空,则视为是一个栈的压入、弹出序列。
思路:
- 模拟题!一个辅助栈,进行匹配
- 如果入栈的数和 出栈的一致,则表示,现在要弹出
- 如果不一致,继续压入
- 记得更新i
/**
* @param {number[]} pushV
* @param {number[]} popV
* @return {boolean}
*/
var isPopOrder = function(pushV, popV)
{
if (pushV.length !== popV.length) return false
const stk = []
function pop() {
return stk[stk.length - 1]
}
let i = 0
for (const num of pushV) {
stk.push(num)
while(stk.length && pop() === popV[i]){
stk.pop()
i++
}
}
return stk.length === 0
}