@Author:Outman
@Date:2023-02-01
括号合法性校验
/**
* 括号合法性校验
* @desc 判定括号嵌套顺序、括号配对数量是否符合规范
* @param {String} str
* @return {boolean}
* @example [{(())}] -> true {[(()}] -> false
*/
const IS_LEAGL_BRACKETS = (str) => {
const len = str.length;
if (!len) return true;
const stack = [];
// 若需判定其他括号,可在下方补充定义"括号常量"
const L_BRACKET = "([{(";
const R_BRACKET = ")]})";
const MATCH_MAP = {
")": "(",
"]": "[",
"}": "{",
")": "(",
};
// 遍历字符,进行括号嵌套合法性校验
for (let i = 0; i < len; i++) {
const char = str[i];
if (L_BRACKET.includes(char)) {
stack.push(char);
} else if (R_BRACKET.includes(char)) {
const top = stack[stack.length - 1];
if (MATCH_MAP[char] === top) {
stack.pop();
} else {
return false;
}
}
}
// 检查栈是否为空,进行配对数量校验
return !stack.length;
};
export {
IS_LEAGL_BRACKETS
};