leetcode-946-验证栈序列

113 阅读1分钟

image.png leetcode原题

解题思路

  1. 创建一个栈来进行后续操作
  2. 遍历入栈操作,将每一个元素入栈
  3. 每次入栈完成后判断栈顶元素是否等于出栈序列第一个元素,如果不等,继续入栈。如果相等,则删除出栈序列的第一个元素,并将栈顶元素弹出,直到栈顶元素不等于出栈序列第一个元素
  4. 重复以上过程,直到所有入栈操作完成
  5. 此时如果栈为空,且出栈序列为空,则说明所有出栈操作都可以完成,且是在最初空栈上进行的,返回 true

否则说明不是,返回 false

var validateStackSequences = function(pushed, popped) {
  // 创建空栈
  const stack = [];
  // 遍历入栈操作序列
  for(let i = 0;i<pushed.length;i++){
    // 将每一个元素入栈
    stack.push(pushed[i])
    // 当栈不为空且栈顶元素等于出栈操作序列的第一个元素时
    while(stack.length && stack[stack.length-1]===popped[0]){
      // 栈顶元素弹出
      stack.pop();
      // 出栈操作序列第一个元素删除
      popped.shift();
    }
  }
  // 如果栈为空且出栈序列为空,则说明两个操作序列是在空栈基础上匹配的操作序列
  return stack.length===0 && popped.length===0
};