门户网站建设统计表,绵阳网站建设企业,广饶网站定制,申请号的网站题1 有效括号的嵌套深度
题解
要求划分出使得最大嵌套深度最小的分组#xff0c;我们首先得知道如何计算嵌套深度。我们可以通过栈实现括号匹配来计算#xff1a; 维护一个栈 s#xff0c;从左至右遍历括号字符串中的每一个字符#xff1a; 如果当前字符是 (#xff0c;…题1 有效括号的嵌套深度
题解
要求划分出使得最大嵌套深度最小的分组我们首先得知道如何计算嵌套深度。我们可以通过栈实现括号匹配来计算 维护一个栈 s从左至右遍历括号字符串中的每一个字符 如果当前字符是 (就把 ( 压入栈中此时这个 ( 的嵌套深度为栈的高度 如果当前字符是 )此时这个 ) 的嵌套深度为栈的高度随后再从栈中弹出一个 (。 例如
括号序列 ( ( ) ( ( ) ) ( ) )
下标编号 0 1 2 3 4 5 6 7 8 9
嵌套深度 1 2 2 2 3 3 2 2 2 1 只要在遍历过程中我们保证栈内一半的括号属于序列 A一半的括号属于序列 B那么就能保证拆分后最大的嵌套深度最小是当前最大嵌套深度的一半。要实现这样的对半分配我们只需要把奇数层的 ( 分配给 A偶数层的 ( 分配给 B 即可。对于上面的例子我们将嵌套深度为 1 和 3 的所有括号 (()) 分配给 A嵌套深度为 2 的所有括号 ()()() 分配给 B。
此外由于在这个问题中栈中只会存放 (因此我们不需要维护一个真正的栈只需要用一个变量模拟记录栈的大小。
实现思路用一个变量d来记录当前深度遇到(“加1遇到”)减1嵌套深度为奇数给A嵌套深度为偶数给B
class Solution(object):def maxDepthAfterSplit(self, seq)::type seq: str:rtype: List[int]ans []d 0for c in seq:if c (:d 1ans.append(d % 2)if c ):ans.append(d % 2)d - 1return ans