题目描述
给定只含01的字符串,找出最长平衡子串的长度(平衡串:包含0和1的个数相同),串长最大100000
样例输入:
01001
样例输出:
1001
#include<bits/stdc++.h>
using namespace std;
#define maxn 100000
int pre[maxn];//记录前缀和
int main(){
string s;
while(cin>>s){
int len=s.size();
int sum=0;
pre[0]=0;
for(int i=0;i<=len;i++){//若前缀和相同 中间一定是01串
if(s[i]=='1'){
sum++;
}
if(s[i]=='0'){
sum--;
}
pre[i+1]=sum;
}
int ans=0,tmp=0;
int begin=0,end=0;
for(int i=0;i<=len;i++){
for(int j=i+1;j<=len;j++){
if(pre[j]==pre[i]){
tmp=j-i;
if(ans<tmp){
ans=tmp;
begin=i;
end=j;
}
}
}
}
for(int i=begin;i<end;i++){
cout<<s[i];
}
cout<<endl;
}
}