# 有效的括号
# 题目要求
给定一个字符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、用Map
或Object
映射去设置括号的左右取值。
2、应使用for in
或for of
来循环判断,因为它拥有break
命令,可在不需要继续遍历时跳出。