一、题目描述:
1) 任何一个左括号都能找到和其正确配对的右括号
2) 任何一个右括号都能找到和其正确配对的左括号
问题一: 怎么判断一个括号字符串有效
问题二:括号最多嵌套几层
示例:
问题一示例
输入:(()) 输出:true
输入:()() 输出:true
输入:(()()) 输出:true
输入:(() 输出:false
输入:)( 输出:false
问题二示例
输入:(()) 输出:2
输入:(()()) 输出:2
输入:(()(())) 输出:3
二、思路分析:
问题一:
使用一个变量count,记录'('的个数,当遇到')'时,执行减一操作。最后判断count是否为0,等于0表示括号字符串正好配对,否则不匹配。
问题二:
括号最多嵌套几层可以沿用问题一的方法,使用变量记录'('的个数,遇到')'时,执行减一操作。使用max记录count最大值,返回max即可。
三、AC 代码:
// 问题一 function isVlid(s) { let count = 0 for (let i = 0; i < s.length; i++) { s[i] === '(' ? count++ : count-- } return count === 0; } // 问题二 function deep(s) { let count = 0 let max = 0 for (let i = 0; i < s.length; i++) { s[i] === '(' ? count++ : count-- max = Math.max(max, count) } return max }
四、总结:
对于括号的配对是属于一个大的类型题目,我们可以使用栈、对象着手解决,但是解决问题的同时,我们尽可能的需要降低运算的复杂度。
作者:ClyingDeng
链接:https://juejin.cn/post/6951213394066145294
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。