有效的括号

105 阅读1分钟

20. 有效的括号

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
  const sl = s.length
  // 若数组个数是奇数则不匹配
  if (sl % 2) return false
  const map = new Map([
    [")", "("],
    ["]", "["],
    ["}", "{"],
  ])
  let stack = []
  for (let i of s) {
    const left = map.get(i)
    // 判断是否有匹配项
    if(left) {
      // 若没有匹配项则不匹配。 / at(-1) 获取数组中最后一项
      if (stack.at(-1) !== left) return false
      // 括号匹配则pop栈顶元素
      stack.pop()
    } else {
      // 没有匹配项则入栈
      stack.push(i)
    }
  }
  // 栈为空则匹配
  return !stack.length
};