问题描述
题目描述:在此
解题报告
为了使两个子序列的嵌套深度中较大者尽量小,最好的方式是尽可能让两个子序列的嵌套深度相同。
所以问题的关键变成了 如何计算序列的嵌套深度。
我们可以通过栈实现括号匹配。
维护一个栈,从左至右遍历括号字符串中的每个字符:
- 如果当前字符为
(
, 将其压入栈中,此时(
的嵌套深度为栈的高度; - 如果当前字符为
)
,此时)
的嵌套深度为栈的高度,随后从栈中弹出一个(
。
当知道序列的嵌套深度计算方式,我们在奇数位取为子序列A
,在偶数位取为子序列B
实现代码
class Solution {
public:
vector<int> maxDepthAfterSplit(string seq) {
vector<int>ans;
int d=0;
for(int i=0;i<seq.size();i++){
if(seq[i]=='('){
d++;
ans.push_back(d%2);
}
else{
ans.push_back(d%2);
d--;
}
}
return ans;
}
};
参考资料
[1] Leetcode 11111. 有效括号的嵌套深度.
[2] 题解区官方答案