zoukankan      html  css  js  c++  java
  • 1111.有效括号的嵌套深度

    有效括号字符串 定义:对于每个左括号,都能找到与之对应的右括号,反之亦然。

    嵌套深度 depth 定义:即有效括号字符串嵌套的层数,depth(A) 表示有效括号字符串 A 的嵌套深度。

    有效括号字符串类型与对应的嵌套深度计算方法如下图所示:

    给你一个「有效括号字符串」seq,请你将其分成两个不相交的有效括号字符串,A 和 B,并使这两个字符串的深度最小。

    • 不相交:每个 seq[i] 只能分给 A 和 B 二者中的一个,不能既属于 A 也属于 B 。
    • A 或 B 中的元素在原字符串中可以不连续。
    • A.length + B.length = seq.length
    • 深度最小:max(depth(A), depth(B)) 的可能取值最小。

    划分方案用一个长度为 seq.length 的答案数组 answer 表示,编码规则如下:

    • answer[i] = 0,seq[i] 分给 A 。
    • answer[i] = 1,seq[i] 分给 B 。
      如果存在多个满足要求的答案,只需返回其中任意一个即可。

    思路:
    在括号字符串有效条件下,最大嵌套深度实际上等于'('连续出现的最大次数。假设嵌套深度最大部分的深度为d,
    则划分以后max(depth(A),depth(B))最小一定等于ceil(d/2)。如果有效字符串seq是几个有效字符串的连接,那么
    只用考虑嵌套深度最大的部分,因为其它部分一定可以划分为深度都小于ceil(d/2)的两部分。如果部分闭合的有效字
    符串深度不超过ceil(d/2),那么加入到A还是B都不会影响结果。

    做法:
    1.遍历seq,计算出整个字符串的最大深度。
    2.遍历seq。

    • 遇到'(',当A深度小于ceil(max_depth/2)时,加入A;反之加入B。
    • 遇到')',当A中还有未闭合的'('时加入A;反之加入B。
        vector<int> maxDepthAfterSplit(string seq) {
            vector<int> res(seq.size());
            if(seq.size()==0) return res;
            //计算出max_len
            int len=0,max_len=0;
            for(int i=0;i<seq.size();++i){
                if(seq[i]=='('){
                    len++;
                    if(len>max_len) max_len=len;
                }
                else len--;
            }
            //已知max(depth(A),depth(B))=ceil(max_len/2),得出A
            int a_depth=0;
            int mid=(max_len+1)/2;
            for(int i=0;i<seq.size();++i){
                if(seq[i]=='('){
                    if(a_depth<mid) {
                        a_depth++;
                        res[i]=0;
                    }
                    else{
                        res[i]=1;
                    }
                }
                else{
                    if(a_depth>0){
                        a_depth--;
                        res[i]=0;
                    }
                    else{
                        res[i]=1;
                    }
                }
            }
            return res;
        }
    
  • 相关阅读:
    运行级别和root密码找回
    磁盘情况查询
    linux磁盘分区、挂载
    三、本地负载均衡器与openfeign声明式客户端
    二、Nacos服务注册与发现
    一、微服务架构演变过程
    shell工具
    Netty概述
    垃圾回收概述及算法
    执行引擎
  • 原文地址:https://www.cnblogs.com/Frank-Hong/p/13381804.html
Copyright © 2011-2022 走看看