【Leetcode】1111. Maximum Nesting Depth of Two Valid Parentheses Strings

题目地址:

https://leetcode.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/

给定一个长 n n n合法的括号序列 s s s,要求将这个序列中的括号分配给两组,使得每组内部是个合法的括号序列,并且两者最大深度更深的那组深度最小。

如果最深深度是 x x x,那么可以将到达深度 x x x时的括号对依次平均分配给两个组,例如可以将深度为偶数的括号都分配给第 0 0 0组,将深度为奇数的括号都分配给第 1 1 1组,这样最大深度就是 ⌈ x 2 ⌉ \lceil \frac{x}{2}\rceil 2x(这个深度就是能取到的最小值了,否则的话会与深度最深是 x x x矛盾)。具体做法是这样的:先开个变量 d d d记录当前括号的深度(设最外层括号深度是 0 0 0),然后循环,如果遇到了左括号,则说明当前括号深度就是 d d d,则将其分配给第 d m o d    2 d\mod 2 dmod2组,并且 d d d递增;如果遇到了右括号,则说明当前括号深度是 d − 1 d-1 d1(和之前最近的未匹配括号深度相同),将其分配给第 ( d − 1 ) m o d    2 (d-1)\mod 2 (d1)mod2组,然后 d d d递减。上述过程最好借助进栈出栈,以及栈的深度来理解。代码如下:

public class Solution {
    public int[] maxDepthAfterSplit(String seq) {
        int[] res = new int[seq.length()];
        int depth = 0;
        for (int i = 0; i < seq.length(); i++) {
            if (seq.charAt(i) == '(') {
                res[i] = depth % 2;
                depth++;
            } else {
                res[i] = (depth - 1) % 2;
                depth--;
            }
        }
        
        return res;
    }
}

时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值