思路,利用栈的先进后出的特点,可以将属于左括号字符串放入数组中,然后遇到属于右括号字符串就根本数组中的最后一位进行比对,如果相匹配就将左括号中数组的最后一项pop出去。再进行下一项对比,最后看左括号中的数组长度,如果长度为0则说明全都匹配返回true,如果长度不为0,就是不匹配,长度为false;
function isMatch(left,right) {
if(left === '(' && right === ')') return true;
if(left === '{' && right === '}') return true;
if(left === '[' && right === ']') return true;
return false;
}
function isBracketsMatch(str) {
const length =str.length;
if(length === 0 ) return false;
const leftBrackets = '({[';
const rightBrackets = ']})';
let arr = [];
for(let i =0;i<length;i++) {
const item = str[i];
if(leftBrackets.includes(item)) {
arr.push(item);
}else if(rightBrackets.includes(item)) {
const lastItem = arr[arr.length-1];
if(isMatch(lastItem,item)) {
arr.pop();
}else {
return false;
}
}
}
return arr.length === 0;
}