leetcode:那些年我遇到过的编程题017:有效括号的嵌套深度

本文深入探讨了LeetCode上的有效括号题目,提出了一种不使用栈的创新解法,通过位运算高效地计算括号的最大嵌套深度,并将括号对分为A、B两类,以简化问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode:那些年我遇到过的编程题017:有效括号的嵌套深度
在这里插入图片描述
在这里插入图片描述在这里插入图片描述我首先想到的是动态规划,能不能把括号拆分一下,分别划分A,B两个序列。设定一个栈,没找到一对()就把她们划分到A,或者B中。

public int[] maxDepthAfterSplit(String seq) {
    if (seq == null || seq.equals("")) return new int[0];
    Stack<Character> stack = new Stack<>();
    int[] res = new int[seq.length()];
    //遍历
    for (int i = 0; i < seq.length(); i++) {
        char c = seq.charAt(i);
        if (c == '(') {//入栈,记录括号对所在深度,奇数用0标记,偶数用1标记。
            res[i] = stack.size() % 2;
            stack.push(c);
        } else {//出栈,记录括号对所在深度,奇数用0标记,偶数用1标记。
            stack.pop();
            res[i] = stack.size() % 2;
        }
    }
    return res;
}

作者:jerrymouse1998
链接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/solution/javazhan-shi-xian-zuo-ti-wu-fen-zhong-du-ti-liang-/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述可以看到由于由于不断访问栈会大大延长内存运算时间
但是其实我们不一定非要使用一个栈

public class Solution {
    public int[] maxDepthAfterSplit(String seq) {
        int[] ans = new int [seq.length()];
        int idx = 0;
        for(char c: seq.toCharArray()) {
            ans[idx++] = c == '(' ? idx & 1 : ((idx + 1) & 1);
        }
        return ans;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值