这道题太变态了,题目描述很冗长也没说清怎么回事。大概意思就是说有一个括弧组成的有效字符串,所谓有效就是说括弧都是成对的。现在把要这个字串的括弧拆成两部分,就是从子串s中抽取一部分括弧作为a串,剩下的作为b串,使得两个字串的深度尽可能小。
返回一个含0和1的数组,对应每个括弧,0相当于把这个括弧给a串,1相当于把这个括弧给b串。
首先要求每个括弧的深度,最后判断深度是奇数给a串,深度是偶数则给b串。这样交错给,每给一次就会拆掉一个深度。
public int[] maxDepthAfterSplit(String seq) {
int n = seq.length();
int[] stack = new int[n / 2 +1];
int[] result = new int[n];
int count = -1;
for(int i = 0; i < n; i++){
char ch = seq.charAt(i);
if(ch == '('){
stack[++count] = i;
continue;
}else if(ch == ')' && count >= 0){
if(stack[count] >= 0){
result[stack[count]] = count + 1;
result[i] = count + 1;
count--;
}
}
}
for(int i = 0; i < result.length; i++){
if(result[i] % 2 == 1){
result[i] = 0;
}else{
result[i] = 1;
}
}
return result;