12. 有效的括号【LC20】

137 阅读1分钟

题目:

给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。

示例 1:

输入:s = "()"
输出:true
示例 2:

输入:s = "()[]{}"
输出:true
示例 3:

输入:s = "(]"
输出:false
示例 4:

输入:s = "([)]"
输出:false
示例 5:

输入:s = "{[]}"
输出:true

关键思路:

一看本题用栈来解决就最合适。 那我还啰嗦什么呢?

说下考虑完备性的问题:

字符串遍历完毕,栈还存在内容的情况, eg. “((”

var isValid = function (s) {
  if (!s || s.length % 2) {
    return false;
  }
  const stack = [];
  const map = {
    "(": ")",
    "[": "]",
    "{": "}"
  };
  const left = Object.keys(map);
  let l = 0;
  let r = s.length;
  while (l < r) {
    if (left.includes(s[l])) {
      stack.push(s[l++])
    } else {
      const it = stack.pop();
      if (!(map[it] === s[l])) {
        return false;
      }
      ++l;
    }
  }
  if (stack.length) {
    return false;
  }
  return true;
};

———— 前端、Javascript实现、算法、刷题、leetcode