括号序列的“深度”在物理上等同于匹配过程中栈的瞬时最大高度

  • 遇到左括号 '(':意味着进入下一层嵌套,当前深度加 1。
  • 遇到右括号 ')':意味着当前层嵌套结束,返回上一层,当前深度减 1。
  • 最终答案:在整个遍历过程中,当前深度变量所达到过的最大值

这种方法将递归定义的树状结构扁平化为线性时间轴上的波动曲线,通过维护一个简单的标量(Scalar)状态即可求解,完全避免了递归带来的栈空间消耗。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    string s;
    cin >> s;

    int sum = 0;
    int ans = 0;
    for (const char c : s) {
        if (c == '(')
            sum++;
        else if (c == ')')
            sum--;
        ans = max(ans, abs(sum));
    }

    cout << ans << endl;
}