Loading

1111-有效括号的嵌套深度

括号匹配的问题一般都是根据栈来实现的,栈内放入括号进行匹配。

文中具体思路见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 };
View Code

 

posted @ 2020-04-01 23:21  是凉城吖  阅读(178)  评论(0)    收藏  举报