Bootstrap

【算法】判断一个字符串是否括号匹配

思路,利用栈的先进后出的特点,可以将属于左括号字符串放入数组中,然后遇到属于右括号字符串就根本数组中的最后一位进行比对,如果相匹配就将左括号中数组的最后一项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];
       // 如果leftBrackets包含当前项,就存入数组中,利用栈的先进后出原则
       if(leftBrackets.includes(item)) { // 左边数组: ['(','{','[']   右边]
        arr.push(item);
       }else if(rightBrackets.includes(item)) { // 如果rightBrackets包含当前项
          // 判断当前项跟数组最后一项是否是左右括号匹配的,如果匹配数组就移除最后一位
          const lastItem = arr[arr.length-1];
          if(isMatch(lastItem,item)) {
            arr.pop();
          }else { // 如果不匹配则直接返回false;
            return false;
          }
       }
    }
     return arr.length === 0;
  }

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;