一、题目描述:
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
}
四、总结:
对于括号的配对是属于一个大的类型题目,我们可以使用栈、对象着手解决,但是解决问题的同时,我们尽可能的需要降低运算的复杂度。