括号匹配的问题一般都是根据栈来实现的,栈内放入括号进行匹配。
文中具体思路见leetcode解析。
知道如何计算嵌套深度,问题就很简单了:只要在遍历过程中,我们保证栈内一半的括号属于序列 A,一半的括号属于序列 B,那么就能保证拆分后最大的嵌套深度最小,是当前最大嵌套深度的一半。要实现这样的对半分配,我们只需要把奇数层的 ( 分配给 A,偶数层的 ( 分配给 B 即可。对于上面的例子,我们将嵌套深度为 1 和 3 的所有括号 (()) 分配给 A,嵌套深度为 2 的所有括号 ()()() 分配给 B。
此外,由于在这个问题中,栈中只会存放 (,因此我们不需要维护一个真正的栈,只需要用一个变量模拟记录栈的大小。
1 class Solution { 2 public: 3 vector<int> maxDepthAfterSplit(string seq) { 4 vector<int> ans; 5 for (int i = 0; i < (int)seq.size(); ++i) { 6 ans.push_back(i & 1 ^ (seq[i] == ‘(‘)); 7 } 8 return ans; 9 } 10 };
原文:https://www.cnblogs.com/nxnslc-blog/p/12616773.html