记录一次面试失败,但是后知后觉又非常简单的面试题:如何校验字符串中‘()’的合法性

一看到题目,想到的思路就是先把字符串的‘(’split掉,这样返回的数组length-1就是‘(’的个数,再把数组join(‘’),再split(‘)’),返回的数组length-1更刚才的是否相等

但是发现 这样判断不了有效性 只能判断()的个数相等

后面发现()个数只是有效性判断的其中一个条件而已,还是需要一个变量去判断有效性

let check = true;
const checked = '()(()())()'.split('(').reduce((acu,cur,idx)=>{
    idx > 0 && (acu += 1);
    acu -= (cur.split(')').length - 1);
    check && (check = acu >= 0);
     return acu
},0)

 checked !== 0 && (check = false)

console.log('checked', checked)

或者在循环时候用for循环  check为false的时候 break 跳出循环 这样更有效率

上一篇:二分


下一篇:高并发系列---【keepalived+nginx实现双主热备】