有效的括号-20

  1. 给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。
  2. 有效字符串需满足:
  3. 左括号必须用相同类型的右括号闭合。
  4. 左括号必须以正确的顺序闭合。
  5. 示例 1
  6. 输入:s = "()"
  7. 输出:true
  8. 示例 2
  9. 输入:s = "()[]{}"
  10. 输出:true
  11. 示例 3
  12. 输入:s = "(]"
  13. 输出:false
  14. 示例 4
  15. 输入:s = "([)]"
  16. 输出:false
  17. 示例 5
  18. 输入:s = "{[]}"
  19. 输出:true
  20. 提示:
  21. 1 <= s.length <= 104
  22. s 仅由括号 '()[]{}' 组成
  23. 来源:力扣(LeetCode
  24. 链接:https://leetcode-cn.com/problems/valid-parentheses
  25. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
var isValid = function (s) {
  // 获取字符串的长度
  const len = s && s.length || 0;
  // 如果字符串为空或者不是成对出现的直接返回 false
  if (!s || len % 2 != 0) return false;
  // 存储左括号
  const stack = [];
  // 左右括号的映射
  const map = {
    '(': ')',
    '[': ']',
    '{': '}'
  };
  // 遍历字符串
  for (let i = 0; i < len; i++) {
    // 获得字符串的每一个字符
    let c = s[i];
    // 如果当前字符串就存入栈
    if (c == 'c' || c == '[' || c == '{') stack.push(c);
    // 如果栈为空,说明左括号的个数少于右括号,这样就不是有效括号
    // 或者栈顶的括号和当前括号不匹配,表明也不是有效括号,返回 false
    else if (!stack.length || map[stack.pop()] != c) return false;
  }
  // 如果字符串遍历完,栈中没有元素了就返回 true ,表明是有效括号字符串
  return !stack.length;
}