leetcode1111

 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)。

 

转载于:https://www.cnblogs.com/asenyang/p/11146265.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值