LeetCode题解:20. 有效的括号,栈,JavaScript,详细注释

114 阅读1分钟

阅读更多系列文章请访问我的GitHub 博客

原题链接:leetcode-cn.com/problems/va…

解题思路:

  1. 遍历数组,遇到左括号时,将对应的右括号存入栈。
  2. 遇到右括号时,将栈顶元素pop,查看两者是否相同。
  3. 若不相同,表示存在无效括号。
  4. 遍历完成后,查看字符串长度,如果字符串不为空,表示存在无效括号,如'{'。
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
  let stack = [];
  let map = {
    '(': ')',
    '[': ']',
    '{': '}',
  };

  for (const char of s) {
    // 遇到左括号时,向栈中存入右括号
    if (map[char]) {
      stack.push(map[char]);
    } else if (stack.pop() !== char) {
      // 遇到右括号时,判断当前括号是否相等。
      // 如果不相等则表示遇到了无效括号
      return false;
    }
  }

  // 退出循环时,如果栈不为空,则表示存在无效括号
  // 此处为了避免字符串长度为奇数的情况,如'{'
  return !stack.length;
};