下面是代码:
#include<stdio.h>
struct save{
char ch;
int i;
};
save ar[20005];
char s,str[20005];
int n,Max,begin,end;
void deal1(int x){
int i,j,sum=1;
for(i=x-1,j=x+1;i>=0
&& j<n
&&
ar[i].ch==ar[j].ch;i--,j++)sum+=2;
if(sum>Max){
Max=sum;
begin=ar[i+1].i;end=ar[j-1].i;
}
}
void deal2(int x){
int i,j,sum=0;
for(i=x,j=x+1;i>=0
&& j<n
&&
ar[i].ch==ar[j].ch;i--,j++)sum+=2;
if(sum>Max){
Max=sum;
begin=ar[i+1].i;end=ar[j-1].i;
}
}
void make(){
int i;
Max=begin=end=0;
for(i=0;i<n;i++){
deal1(i);//子串为奇数
deal2(i);//子串为偶数
}
}
int main(){
int i,j=0,t,k=0;
FILE *fin=fopen("calfflac.in","r");
FILE *fout=fopen("calfflac.out","w");
while(fscanf(fin,"%c",&s)!=EOF){
str[k++]=s;
if((s<='z' &&
s>='a') || (s<='Z'
&&
s>='A'))//处理
{
if(s<'a')
s+=32;
ar[j].ch=s;
ar[j++].i=k-1;
}
}
n=j;
make();
fprintf(fout,"%d\n",Max);
for(i=begin;i<=end;i++)
fprintf(fout,"%c",str[i]);
fprintf(fout,"\n");
return 0;
}