|
| 1 | +package main |
| 2 | + |
| 3 | +import "fmt" |
| 4 | + |
| 5 | +func main() { |
| 6 | + fmt.Println(maxDepthAfterSplit("()(())()")) |
| 7 | +} |
| 8 | + |
| 9 | +//有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。详情参见题末「有效括号字符串」部分。 |
| 10 | +// |
| 11 | +//嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。详情参见题末「嵌套深度」部分。 |
| 12 | +// |
| 13 | +//有效括号字符串类型与对应的嵌套深度计算方法如下图所示: |
| 14 | +// |
| 15 | +// |
| 16 | +//给你一个「有效括号字符串」 seq,请你将其分成两个不相交的有效括号字符串,A 和 B,并使这两个字符串的深度最小。 |
| 17 | +// |
| 18 | +//不相交:每个 seq[i] 只能分给 A 和 B 二者中的一个,不能既属于 A 也属于 B 。 |
| 19 | +//A 或 B 中的元素在原字符串中可以不连续。 |
| 20 | +//A.length + B.length = seq.length |
| 21 | +//深度最小:max(depth(A), depth(B)) 的可能取值最小。 |
| 22 | +//划分方案用一个长度为 seq.length 的答案数组 answer 表示,编码规则如下: |
| 23 | +// |
| 24 | +//answer[i] = 0,seq[i] 分给 A 。 |
| 25 | +//answer[i] = 1,seq[i] 分给 B 。 |
| 26 | +//如果存在多个满足要求的答案,只需返回其中任意 一个 即可。 |
| 27 | +// |
| 28 | +// |
| 29 | +// |
| 30 | +//示例 1: |
| 31 | +// |
| 32 | +//输入:seq = "(()())" |
| 33 | +//输出:[0,1,1,1,1,0] |
| 34 | +//示例 2: |
| 35 | +// |
| 36 | +//输入:seq = "()(())()" |
| 37 | +//输出:[0,0,0,1,1,0,1,1] |
| 38 | +//解释:本示例答案不唯一。 |
| 39 | +//按此输出 A = "()()", B = "()()", max(depth(A), depth(B)) = 1 。 |
| 40 | +//像 [1,1,1,0,0,1,1,1],也是正确结果,其中 A = "()()()", B = "()", max(depth(A), depth(B)) = 1 。 |
| 41 | +// |
| 42 | +// |
| 43 | +//提示: |
| 44 | +// |
| 45 | +//1 <= text.size <= 10000 |
| 46 | +// |
| 47 | +// |
| 48 | +//有效括号字符串: |
| 49 | +// |
| 50 | +//仅由 "(" 和 ")" 构成的字符串,对于每个左括号,都能找到与之对应的右括号,反之亦然。 |
| 51 | +//下述几种情况同样属于有效括号字符串: |
| 52 | +// |
| 53 | +// 1. 空字符串 |
| 54 | +// 2. 连接,可以记作 AB(A 与 B 连接),其中 A 和 B 都是有效括号字符串 |
| 55 | +// 3. 嵌套,可以记作 (A),其中 A 是有效括号字符串 |
| 56 | +//嵌套深度: |
| 57 | +// |
| 58 | +//类似地,我们可以定义任意有效括号字符串 s 的 嵌套深度 depth(S): |
| 59 | +// |
| 60 | +// 1. s 为空时,depth("") = 0 |
| 61 | +// 2. s 为 A 与 B 连接时,depth(A + B) = max(depth(A), depth(B)),其中 A 和 B 都是有效括号字符串 |
| 62 | +// 3. s 为嵌套情况,depth("(" + A + ")") = 1 + depth(A),其中 A 是有效括号字符串 |
| 63 | +// |
| 64 | +//例如:"","()()",和 "()(()())" 都是有效括号字符串,嵌套深度分别为 0,1,2,而 ")(" 和 "(()" 都不是有效括号字符串。 |
| 65 | +//maximum-nesting-depth-of-two-valid-parentheses-strings |
| 66 | + |
| 67 | +func maxDepthAfterSplit(seq string) []int { |
| 68 | + // 奇偶性直接判断 证明见leetcode |
| 69 | + res := make([]int, len(seq)) |
| 70 | + for i, s := range seq { |
| 71 | + if s == '(' { |
| 72 | + res[i] = i & 1 |
| 73 | + } else { |
| 74 | + res[i] = (i + 1) & 1 |
| 75 | + } |
| 76 | + } |
| 77 | + return res |
| 78 | +} |
0 commit comments