1 class Solution: 2 def maxDepthAfterSplit(self, seq: str) -> 'List[int]': 3 n = len(seq) 4 stack = [] 5 res = [0] * n 6 odd = True 7 for i in range(n): 8 cur = seq[i] 9 if cur == '(': 10 stack.append(i) 11 else: 12 top = stack.pop(-1) 13 if odd: 14 res[top] = 1 15 res[i] = 1 16 odd = not odd 17 return res
思路:本题使用贪心思想,使用一个stack存储括号的索引。
遍历到")"括号时,则将其与栈顶的'('一起分配。题目要求尽量要保持A与B的平衡,只需要轮流分配给A和B即可。
举例来说:"( ( ( ) ( ) ) )",遍历此字符串:
i = 0, cur = '(',入栈。
i = 1, cur = '(',入栈。
i = 2, cur = '(',入栈。
i = 3, cur = ')',栈顶必然是'(',栈顶出栈,将栈顶和当前两个位置分配给串B(标记1)。
i = 4, cur = '(',入栈。
i = 5,cur = ')',栈顶必然是'(',栈顶出栈,因为上一次分配给了串B,因此本次将栈顶和当前两个位置分配给串A(标记0)。
i = 6,cur = ')',栈顶出栈,分配给串B(标记1)。
i = 7,cur = ')',栈顶出栈,分配给串A(标记0)。