题解 | #栈的压入、弹出序列#
栈的压入、弹出序列
https://www.nowcoder.com/practice/d77d11405cc7470d82554cb392585106
解法一:笨方法(列出所有情况)
function IsPopOrder(pushV, popV)
{
// write code here
const stack = []
while (popV.length > 0) {
const currentPop = popV.shift()
if (pushV.length > 0 && stack.length === 0) {
if (pushV[0] === currentPop) {
pushV.shift()
} else {
while (pushV.length > 0 && pushV[0] !== currentPop) {
const currentPush = pushV.shift()
stack.push(currentPush)
}
if (pushV.length === 0) {
return false
} else {
pushV.shift()
}
}
} else if (pushV.length > 0 && stack.length > 0) {
if (pushV[0] === currentPop) {
pushV.shift()
} else if (stack[stack.length - 1] === currentPop) {
stack.pop()
} else {
while (pushV.length > 0 && pushV[0] !== currentPop) {
const currentPush = pushV.shift()
stack.push(currentPush)
}
if (pushV.length === 0) {
return false
} else {
pushV.shift()
}
}
} else if (pushV.length === 0 && stack.length > 0) {
if (stack[stack.length - 1] === currentPop) {
stack.pop()
} else {
return false
}
} else {
return false
}
}
return true
}
module.exports = {
IsPopOrder : IsPopOrder
};
解法二:
function IsPopOrder(pushV, popV)
{
// write code here
const stack = []
let j = 0
for (let i = 0; i < popV.length; i++) {
while (j < pushV.length && (stack.length === 0 || stack[stack.length - 1] !== popV[i])) {
stack.push(pushV[j])
j++
}
if (stack[stack.length - 1] === popV[i]) {
stack.pop()
} else {
return false
}
}
return true
}
module.exports = {
IsPopOrder : IsPopOrder
};