string get_substring(string str){
if(str=="") return "";
int len=str.length(),from,to,max1=-INT_MAX,max2=-INT_MAX;
int* one=new int[len];
int* zero=new int[len];
int* diff=new int[len];
memset(one,0,sizeof(one));
memset(zero,0,sizeof(zero));
memset(diff,0,sizeof(diff));
for(int i=0;i<len;i++){
if(str[i]=='0'){
zero[i]=(i-1>=0)?zero[i-1]+1:1;
one[i]=(i-1>=0)?one[i-1]:0;
}
if(str[i]=='1'){
one[i]=(i-1>=0)?one[i-1]+1:1;
zero[i]=(i-1>=0)?zero[i-1]:0;
}
diff[i]=one[i]-zero[i];
if(diff[i]==0)
max2=i;
}
if(max2!=-INT_MAX)
max2++;
map<int,int> mp;
for(int i=0;i<len;i++){
if(diff[i]!=0){
if(mp.count(diff[i])){
max1=i-mp[diff[i]];
from=mp[diff[i]];
to=i;
}
else{
mp[diff[i]]=i;
}
}
}
delete[] one;
delete[] zero;
delete[] diff;
int max=max1>max2?max1:max2;
if(max==-INT_MAX) return "";
else{
if(max1>max2)
return str.substr(from+1,to-from);
else
return str.substr(0,max2);
}
}
相伴一生
最新推荐文章于 2020-12-05 09:45:02 发布