题目描述
分别给定入栈序列和出栈序列,判断该出栈序列是否是可能的正确的出栈序列
比如入栈序列为 [1, 2, 3, 4, 5]
,出栈序列为[3, 2, 5, 4, 1]
,则该出栈序列是正确的,因为可以按照下列入栈出栈顺序
入栈 1 => 入栈 2 => 入栈 3 => 出栈 3 => 出栈 2 => 入栈 4 => 入栈 5 => 出栈 5 => 出栈4 => 出栈 1
这种情况就返回true,如果按照给定的入栈出栈序列,无法正常完成入栈出栈操作,则返回false
代码实现
- 思路1,模拟入栈出栈过程,如果能正常完成入栈出栈过程,则出栈序列是对的
function isTrueOutStack (inStack, outStack) {
var stack = []
var pushUntil = outStack[0]
inStack = inStack.slice()
outStack = outStack.slice()
while (inStack.length > 0) {
// push
while (1) {
stack.push(inStack.shift())
if (stack[stack.length-1] === pushUntil) break
}
// pop
while (stack[stack.length-1] === outStack[0]){
// console.log(stack, outStack)
stack.pop()
outStack.shift()
if (stack.length <= 0 ) break
}
pushUntil = outStack[0]
}
if (stack.length === 0) return true