求出m个串中大于三的最长的公共子串。
范围比较小,暴力就能过。
长度枚举从3开始至60。如果能找出一个公共串就记录,最后记录的一定是最大的。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<cctype>
#include<iostream>
#include<cmath>
#include<set>
using namespace std;
char str[11][80],ans[80],x[80];
int n;
int pd()
{
for(int i=1;i<n;i++)
{
if(strstr(str[i],ans)==NULL)
return 0;
}
return 1;
}
int main()
{
int t;
cin>>t;
while(t--)
{
memset(str,0,sizeof(str));
memset(ans,0,sizeof(ans));
memset(x,0,sizeof(x));
cin>>n;
for(int i=0;i<n;i++)
scanf(" %s",str[i]);
int k=3,flag=0;
while(k<=60)
{
memset(ans,0,sizeof(ans));
for(int i=0;i<=60-k;i++)
{
for(int j=0;j<k;j++)
ans[j]=str[0][i+j];
ans[k]='\0';
if(pd())
{
flag=1;
memcpy(x,ans,sizeof(ans));
}
}
k++;
}
if(flag)
puts(x);
else
printf("no significant commonalities\n");
}
return 0;
}