括号匹配问题:括号字符串的最大匹配嵌入深度是多少?
提示:系列括号问题,都是有技巧的
与括号匹配相关的基础知识:
【1】括号匹配问题:判断一个字符串是否为有效的括号匹配
【2】括号匹配问题:括号字符串是否有效匹配,无效的话还需要加多少个括号才能完全匹配
题目
括号匹配问题:括号字符串的最大匹配嵌入深度是多少?
所谓最大的匹配嵌入深度,就是套了多少层?
比如:
((()))套了三层
(()())最大套了2层
()()最大套了1层
问你一个括号字符串它的最大嵌套深度是多少?
一、审题
下文必须看完,看完才能做本题:
【2】括号匹配问题:括号字符串是否有效匹配,无效的话还需要加多少个括号才能完全匹配
还是利用count计数,然后只需统计(左括号的嵌套深度,遇到count的最大值就是嵌入深度
其实count在计数过程中,持续count的最大值,代表遇到的(左括号的个数,当遇到)有括号count–,所以呢,抵消了一个嵌套层
因此需要记录count的最大值,就是咱们的最大嵌套深度
手撕代码问题不大:
直接用上面2文章的代码改变就行
不需要need
//复习
public static int maxDeepthReview(String s){
if (s.compareTo("") == 0 || s.length() < 2) return 0;
char[] str = s.toCharArray();
int N = str.length;
int count = 0;
int max = 0;//结果
for (int i = 0; i < N; i++) {
if (str[i] == '(') count++;
else count--;
//count在计数过程中,最大值就是左括号(的深度
max = Math.max(max, count);
}
return max;
}
public static void test(){
String s = "((()()))()()(())";//最大深度嵌入3
System.out.println(maxDeepth(s));
System.out.println(maxDeepthReview(s));
}
public static void main(String[] args) {
test();
}
测试结果:
3
3
总结
提示:重要经验:
1)count在计数过程中,持续count的最大值,代表遇到的(左括号的个数,当遇到)有括号count–,所以呢,抵消了一个嵌套层
因此需要记录count的最大值,就是咱们的最大嵌套深度
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。