第三题 动态规划,力扣上有一题是让求相等长度最大是多少,和这个稍微有一点区别。来年春招再见吧。

main(){
int[] binary = new int[]{1,0,0,0,1,1,0,0,1,1};
int len = binary.length;
int[] dp = new int[len+1];
char[] var = new char[len];
int zero = binary[0]==0?1:0;
var[0] = (char) (binary[0]+48);
PriorityQueue<String> queue = new PriorityQueue<String>((a,b)->{
return b.compareTo(a);
});
for(int i = 1; i < len; i++) {
var[i] = (char) (binary[i] + 48);
dp[i] = Math.max(dp[i-1],zero);
if(binary[i]==0){
zero++;
}
}
if(zero==0||zero==len){ ///一个0或者1都没有
return;
}
dp[len] = Math.max(zero,dp[len-1]);
for(int i = 1; i < len; i++) {
for(int j = i-1; j >=0; j--) {
zero = dp[i+1] - dp[j];
if((i-j+2)-zero==zero) {
String s = String.valueOf(var, j, i - j + 1);
if(queue.isEmpty()){
queue.add(s);
}else{
if(i-j+1>queue.peek().length()){
queue.clear();
}
queue.add(s);
}
}
}
}
System.out.println(queue.peek());
}