1111.有效括号的嵌套深度
题目:
有效括号字符串:
仅由 (
和 )
构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然。
下述几种情况同样属于有效括号字符串:
1. 空字符串
2. 连接,可以记作AB,其中 A 和 B 都是有效括号字符串
3. 嵌套,可以记作(A),其中 A 是有效括号字符串
嵌套深度:
类似地,我们可以定义任意有效括号字符串 s
的 嵌套深度 depth(s)
:
1. s 为空时,depth("") = 0
2. s 为 A 与 B 连接时,depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是有效括号字符串
3. s 为嵌套情况,depth("(" + A + ")") = 1 + 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
。
如果存在多个满足要求的答案,只需返回其中任意 一个 即可。
思路:
由深度的定义可知,应尽可能将成对的括号均分给A
和B
以确保深度最小。
显然,左括号对应嵌套深度+1
,右括号对应嵌套深度-1
。因此,只需要把成对的括号按嵌套深度的奇偶性拆分为两组即可。代码如下:
class Solution {
public int[] maxDepthAfterSplit(String seq) {
int[] result = new int[seq.length()];
int depth = 0;
// 将奇数深度分给A,偶数深度分给B
for (int i=0; i < seq.length(); i++) {
if (seq.charAt(i) == ‘(‘) {
depth++;
result[i] = (depth+1) % 2;
}else {
depth--;
// 右括号使深度减小,需要对其划分逻辑取反
result[i] = depth % 2;
}
}
return result;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
原文地址:https://www.cnblogs.com/aries99c/p/12616941.html
时间: 2024-11-09 10:23:24