字符串大暴力。
选出最短的串,暴力枚举每一个子串,正反两个,逐个匹配。
#include<cstdio>
#include<cstring>
char dic[105][105];
char key[105];
char z[105],rev[105];
int ans;
int main()
{
int t;
scanf("%d",&t);
while(t--){
int n;
memset(key,0,sizeof(key));
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%s",dic[i]);
if(strlen(dic[i])<strlen(key)||strlen(key)==0){
strcpy(key,dic[i]);
}
}
int m=strlen(key);
ans=0;
for(int i=0;i<m;i++){
for(int j=i;j<m;j++)
{
for(int k=i,l=0,r=j;k<=j;k++,r--,l++)
{
z[l]=key[k];
rev[l]=key[r];
}
z[j+1-i]='\0';
rev[j+1-i]='\0';
int cnt=0;
for(int k=0;k<n;k++)
{
if(strstr(dic[k],z)||strstr(dic[k],rev)){
cnt++;
continue;
}
break;
}
if(cnt==n){
int len=j+1-i;
if(len>ans){
ans=len;
}
}
}
}
printf("%d\n",ans);
}
return 0;
}