zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    获取本地地址,获取上传文件的后缀
    foreach
    es6入门
    jquery-ui 拖拽排序
    移动端常用
    vue父子组件通信
    Weinre(pc调试手机页面)
    Ztree的使用
    jquery on() 转
    c++ 基本使用
  • 原文地址:https://www.cnblogs.com/asenyang/p/11146265.html
Copyright © 2011-2022 走看看