链接:https://leetcode-cn.com/problems/maximum-nesting-depth-of-two-valid-parentheses-strings/
首先理解一个小括号字符串的嵌套深度应该如何得出。假设用栈去遍历这样一个字符串,左括号直接压入栈,右括号则弹出栈顶左括号。这样这个字符串的嵌套深度实际就是所有时刻栈中元素的最大值。
对于这道题,我们用贪心的方法划分字符串即可。可以记录两个子字符串当前的“栈中元素”个数,左括号划分给小的,右括号划分给大的。
C++代码:
class Solution {
public:
vector<int> maxDepthAfterSplit(string seq) {
int A = 0;
int B = 0;
vector<int> result;
for (int i = 0;i<seq.size();i++)
{
if(seq[i]=='(')
{
if(A>B)
{
result.push_back(1);
B++;
}
else
{
result.push_back(0);
A++;
}
}
else
{
if(A>B)
{
result.push_back(0);
A--;
}
else
{
result.push_back(1);
B--;
}
}
}
return result;
}
};
简化版本:注意到实际只需要按顺序依次划分左括号,按相反顺序划分右括号,就可以达到目标。
C++:
class Solution {
public:
vector<int> maxDepthAfterSplit(string seq) {
vector<int> result;
for (int i = 0;i<seq.size();i++)
{
if(seq[i] =='(')
result.push_back(i&1);
else
result.push_back((i+1)&1);
}
return result;
}
};
Java:
class Solution {
public int[] maxDepthAfterSplit(String seq) {
int result[] = new int [seq.length()];
for (int i = 0;i<seq.length();i++)
{
if(seq.charAt(i) =='(')
result[i] = i&1;
else
result[i] = (i+1)&1;
}
return result;
}
}