【LeetCode】4月1日打卡-Day17-括号匹配/嵌套深度

题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 = 0
        for c in seq:
            if c == '(':
                d += 1
                ans.append(d % 2)
            if c == ')':
                ans.append(d % 2)
                d -= 1
        return ans

猜你喜欢

转载自blog.csdn.net/xd963625627/article/details/105242757