返回

用 JavaScript 排除万难,征服 LeetCode 第 5 天 | 有效的括号

前端

开篇

踏入 LeetCode 探索之旅的第五天,你将邂逅一道备受欢迎的经典题——括号验证。这项挑战要求你利用 JavaScript 的强大功能,判断一个仅包含括号字符的字符串是否有效。这不仅考验你的编程技巧,更对你的算法思维提出挑战。准备好了吗?让我们携手开始吧!

算法之旅

面对这一难题,你将接触到一种名为「栈」的数据结构。栈是一种先进后出的数据结构,你可以想象成一个垂直的弹簧,先放进去的东西会先出来。我们将栈用于存储括号字符,每遇到一个左括号,我们就将其压入栈中,每遇到一个右括号,我们就将栈顶元素弹出。若弹出元素与右括号匹配,则说明括号有效,否则无效。

代码详解

为了帮助你更加直观地理解算法实现,我们准备了以下代码:

const isValid = (s) => {
  if (s === null || s.length % 2 !== 0) {
    return false;
  }

  const stack = [];
  const leftBrackets = ["(", "{", "["];
  const rightBrackets = [")", "}", "]"];

  for (let char of s) {
    if (leftBrackets.includes(char)) {
      stack.push(char);
    } else if (rightBrackets.includes(char)) {
      const top = stack.pop();
      if (leftBrackets.indexOf(top) !== rightBrackets.indexOf(char)) {
        return false;
      }
    }
  }

  return stack.length === 0;
};

示例探究

为了让你更加真切地感受到算法的实际应用,我们准备了以下示例:

  • 输入:"(())"

    输出:true

    解析:括号序列中,每个左括号都有对应的右括号,因此该括号序列有效。

  • 输入:"()[]{}"

    输出:true

    解析:括号序列中,每个左括号都有对应的右括号,且左右括号匹配,因此该括号序列有效。

  • 输入:"{[()]}}"

    输出:false

    解析:括号序列中,右括号 "}" 在左括号 " 之前出现,因此该括号序列无效。

结语

在本次 LeetCode 之旅中,你学会了如何用 JavaScript 判断括号序列是否有效。我们用栈的数据结构和清晰的代码实现,一步步带你攻克这一挑战。希望你能够从中收获满满,继续探索 LeetCode 的精彩世界!