#include<stdio.h>
//#include<stdlib.h>
#include<string.h>
int f(int n,char*x,char*cmp,int l)
{
int i,j,t;
//printf("%d %s %s/n",n,x,cmp);//验证是否正确
for(i=0;i<=l-n;i++)
{
t=0;
if(cmp[i]==x[0]){if(n==1)t=1;
else for(j=i+1;j<i+n;j++)
{if(cmp[j]==x[j-i])t=1;
else {t=0;break;}
}
}
else if(cmp[i]==x[n-1]){if(n==1)t=1;
else for(j=i+1;j<i+n;j++)
{if(cmp[j]==x[n-1-(j-i)])t=1;
else {t=0;break;}
}
}
if(t)break;
}
return t;
}
int main()
{
int n,t,i,j,k,l,len[100],p;
char str[100][110],cmp[100];
scanf("%d",&t);
while(t--)
{int min;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%s",str[i]);
len[i]=strlen(str[i]);
}
min=len[0];
for(i=0;i<n;i++)
if(min>len[i])min=len[i];
for(i=min;i>0;i--)//最大长度
{ for(j=0;j<=len[0]-i;j++)
{for(k=j;k<j+i;k++)cmp[k-j]=str[0][k];
cmp[k]='/0'; //以第1个串为标准,用来记录作比较的串
for(l=1;l<n;l++){if(f(i,cmp,str[l],len[l]))p=1;
//从第2个串比较
else{p=0;break;}}
if(p)break;
}
if(p){printf("%d/n",i);break;}
}if(p==0)printf("0/n");
}
// system("pause");
return 0;
}
poj 2744子串 答案
最新推荐文章于 2020-04-07 09:49:24 发布