1111. 有效括号的嵌套深度
难度中等134收藏分享切换为英文接收动态反馈
有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。
嵌套深度 depth
定义:即有效括号字符串嵌套的层数,depth(A)
表示有效括号字符串 A
的嵌套深度。详情参见题末「嵌套深度」部分。
有效括号字符串类型与对应的嵌套深度计算方法如下图所示:
给你一个「有效括号字符串」 seq
,请你将其分成两个不相交的有效括号字符串,A
和 B
,并使这两个字符串的深度最小。
- 不相交:每个
seq[i]
只能分给A
和B
二者中的一个,不能既属于A
也属于B
。 A
或B
中的元素在原字符串中可以不连续。A.length + B.length = seq.length
- 深度最小:
max(depth(A), depth(B))
的可能取值最小。
划分方案用一个长度为 seq.length
的答案数组 answer
表示,编码规则如下:
answer[i] = 0
,seq[i]
分给A
。answer[i] = 1
,seq[i]
分给B
。
如果存在多个满足要求的答案,只需返回其中任意 一个 即可。
示例 1:
1 | 输入:seq = "(()())" |
示例 2:
1 | 输入:seq = "()(())()" |
提示:
1 < seq.size <= 10000
有效括号字符串:
1 | 仅由 "(" 和 ")" 构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然。 |
嵌套深度:
1 | 类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(S): |
一次遍历,根据深度的奇偶分类
- 遇到左括号深度加一
- 遇到右括号深度减一
- 相邻深度的括号不能放在同一个类里面,通过奇偶分类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18class Solution {
public int[] maxDepthAfterSplit(String seq) {
int depth = 0;
int n = seq.length();
int[] val = new int[n];
for (int i = 0; i < n; i++) {
if (seq.charAt(i) == '(') {
depth++;
val[i] = depth;
} else {
val[i] = depth;
depth--;
}
val[i] = val[i] % 2;
}
return val;
}
}
位运算
1 | class Solution { |