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

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

3周前 (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 保存历史最大值,无需额外空间,简洁高效。

五、总结

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

原创内容 转载请注明出处

分享给朋友:

相关文章

线性遍历+二进制 6行代码征服二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数

力扣1290.二进制链表转整数题目本质给定一个单链表的头节点head,链表中每个节点的值为0或1。链表表示一个‌最高有效位在前‌的二进制数字,要求将其转换为对应的十进制整数。例如链表1→0→1对应的二...

力扣654:递归分治的艺术 如何用最大元素构建二叉树

力扣654:递归分治的艺术 如何用最大元素构建二叉树

题目重解我们面对一个看似简单却充满递归魅力的题目:给定一个不含重复元素的整数数组,需要构建一棵特殊的二叉树。这个树的每个父节点都必须是当前子数组中的最大元素,而它的左右子树则分别由该最大值左侧和右侧的...

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

一、题目解读洛谷1220题要求计算在n个位置放置灯的情况下,通过关闭连续区间灯并移动至区间端点,使得总耗电量最小。需考虑灯的功率与位置差异,设计高效的算法求解最优策略。二、解题思路1. 动态规划 +...

发表评论

访客

看不清,换一张

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