# 有效的括号

# 题目要求

给定一个字符s,判断里面的括号是否有效 '('、')'、'[' 、']'、'{'、'}' 前提条件: 1、左括号必须用相同类型的右括号闭合 2、左括号必须以正确的顺序闭合

示例 1:
输入:s = "()"
输出:true
示例 2:
输入:s = "()[]{}"
输出:true
示例 3:
输入:s = "(]"
输出:false
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true

# 答案解析

用Map映射来找到对应的括号,因为括号是左右映衬的关系,所以先推入所有的左括号,一旦后者与前者不对应,则返回false。

function checkKuoHao(s) {
  /**
   * 只需要考虑2种情况,一种是按顺序成对从左到右排列
   * 另一种时从里到外成对排列
   * 字符串长度小于2或为奇数时直接返回false,
   * 左右括号的数量一定的是对等的。
   */
  if (s.length < 2 || s.length % 2 != 0) return false;

  // 创建映射
  let map = new Map([
    ["{", "}"],
    ["(", ")"],
    ["[", "]"],
  ]);

  let strArr = [...s];
  let leftStack = [];

  for (item of strArr) {
    if (item == "{" || item == "(" || item == "[") {
      leftStack.push(item);
    } else {
      // 是否与前一位映射相等,若不想等,则直接跳出。
      if (map.get(leftStack[leftStack.length - 1]) == item) {
        leftStack.pop();
      } else {
        return false;
      }
    }
  }

  return true;
}

console.log(checkKuoHao("()[]("); // false
console.log(checkKuoHao("()](")); // false
console.log(checkKuoHao("()[]")); // true

# 思路要点

1、用MapObject映射去设置括号的左右取值。 2、应使用for infor of来循环判断,因为它拥有break命令,可在不需要继续遍历时跳出。