在 JavaScript 中验证 push pop 序列
问题
JavaScript函数接受两个数组,pushed和popped,作为第一个和第二个参数。这两个数组都保证由唯一元素组成。
当且仅当这可能是对最初为空的堆栈的一系列push和pop操作的结果时,我们的函数应该返回true,否则返回false。
例如,如果函数的输入是-
const pushed = [1, 2, 3, 4, 5]; const popped = [4, 5, 3, 2, 1];
那么输出应该是-
const output = true;
输出说明
我们可能会执行以下顺序-
push(1), push(2), push(3), push(4), pop() -> 4, push(5), pop() -> 5, pop() -> 3, pop() -> 2, pop() -> 1
示例
此代码将是-
const pushed = [1, 2, 3, 4, 5]; const popped = [4, 5, 3, 2, 1]; const validateSequence = (pushed = [], popped = []) => { let pushedIndex = 0 let poppedIndex = 0 const stack = [] while (pushedIndex < pushed.length) { if (stack[stack.length - 1] !== popped[poppedIndex]) { stack.push(pushed[pushedIndex++]) } else { stack.pop() poppedIndex += 1 } } while (stack.length) { if (stack.pop() !== popped[poppedIndex++]) { return false } } return true; }; console.log(validateSequence(pushed, popped));输出结果
控制台中的输出将是-
true