当前位置:首页 > 牛客 > 牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

10个月前 (06-24)

牛客14496题解:括号最大深度问题(栈思想与代码优化) 牛客题解 括号最大深度 栈 代码优化 C++ 第1张

一、题目解读

牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。

二、解题思路

采用思想的简化版本:无需显式使用栈数据结构,而是通过计数器模拟栈行为。核心逻辑是:

1. 遍历字符串,遇到左括号深度+1,右括号深度-1。

2. 实时更新当前深度与历史最大深度。

此思路将嵌套深度转化为“括号平衡计数”,避免复杂数据结构,提升效率。

三、解题步骤

1. 初始化变量:当前深度 current 与最大深度 max_d 均设为0。

2. 遍历字符串:

○ 若遇 (',current++ 并更新 max_d(若 current 更大)。

○ 若遇 ')',current--(模拟栈弹出)。

3. 返回结果:遍历结束后,max_d 即为所求最大深度。

四、代码与注释

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

// 计算括号字符串的最大深度
int maxDepth(string s) {
    int current = 0;    // 当前深度
    int max_d = 0;      // 最大深度
    
    for(char c : s) {   // 遍历每个字符
        if(c == '(') {  // 遇左括号,深度+1
            current++;
            max_d = max(max_d, current);  // 更新最大深度
        }
        else if(c == ')') {  // 遇右括号,深度-1
            current--;
        }
    }
    
    return max_d;
}

int main() {
    string input;
    cin >> input;      // 输入字符串
    cout << maxDepth(input) << endl;  // 输出结果
    return 0;
}

注释:代码通过单次遍历实现O(n)时间复杂度,利用 current 实时记录深度,max_d 保存历史最大值,无需额外空间,简洁高效。

五、总结

本解法巧妙将括号匹配问题转化为计数问题,无需栈操作,降低空间开销。通过“边遍历边更新”的策略,实现线性时间复杂度。此思路适用于同类括号嵌套深度计算场景,对编程面试与算法练习具有参考价值。

原创内容 转载请注明出处

分享给朋友:

相关文章

力扣第75题新思路:如何用选择排序实现原地操作?

力扣第75题新思路:如何用选择排序实现原地操作?

给定一个包含红色、白色和蓝色元素的数组,分别用数字 0、1、2 表示,要求在不使用库排序函数的情况下,仅通过一次遍历(但实际上允许使用经典排序方法)对数组进行原地排序。题目要求将所有 0 排在前面,1...

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

题目重解给定一个字符串,将字符按照出现频率降序排列。例如输入"tree",可能返回"eetr"或"eert"。题目要求我们不考虑字母顺序,只...

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

力扣1137题:动态规划解泰波那契数 高效求解第N项的秘密

一:重新解读题目泰波那契数列是一个充满数学趣味的递推序列:从第3项开始,每个数均为前三个数的和(即Tₙ₊₃ = Tₙ + Tₙ₊₁ + Tₙ₊₂)。当给定整数n时,需要高效计算出第n项的值。面对此类递...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

题目重解给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们的目标是找到一条路径,使得路径上经过的数字总和最大。这个问题在实际中有许多应用场景,如最优路径规划、...

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。