【栈结构应用】牛客14496题:括号匹配深度问题的最优解法全解析

问题描述
给定一个合法的括号序列,求其最大嵌套深度。例如:"(())()"的最大深度为2。
算法思路
初始化当前深度和最大深度为0
遍历字符串:
遇到'('时深度+1,更新最大深度
遇到')'时深度-1
C++代码实现
#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 == '(') {
current++; // 遇到左括号,深度+1
max_d = max(max_d, current); // 更新最大深度
}
else if(c == ')') {
current--; // 遇到右括号,深度-1
}
}
return max_d;
}
int main() {
string input;
cin >> input;
cout << maxDepth(input) << endl;
return 0;
}复杂度分析
时间复杂度:O(n),只需遍历字符串一次
空间复杂度:O(1),仅使用常数空间
关键点解析
字符串必须合法(题目已保证)
不需要真正使用栈,只需计数即可
每次遇到'('都要检查是否需要更新最大深度
边界情况
空字符串返回0
单对括号"()"返回1
深度最大的情况如"(((...)))"
实际应用
这种算法在编译器设计、JSON/XML解析、代码格式化等场景都有重要应用。
原创内容 转载请注明出处
