首页 > 其他 > 详细

leetcode1111

时间:2019-07-07 15:20:59      阅读:186      评论:0      收藏:0      [点我收藏+]
 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 len(stack) == 0 or cur == (:
10                 stack.append((i,cur))
11             else:
12                 top = stack.pop(-1)
13                 if odd:
14                     res[top[0]] = 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 = ‘)‘,分配给A

i = 7,cur = ‘)‘,分配给B

技术分享图片

 

leetcode1111

原文:https://www.cnblogs.com/asenyang/p/11146265.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!