题意很简单,找最长且字典序最大的公共子串,并且长度不能小于3
方法是暴力,找出第一个字符串的所有子串,依次与后面的字符串匹配。
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include<iostream>
using namespace std;
char a[15][65];
char temp[65];
char answer[65];
int len;
int k;
int Find;
int cases,n;
int main()
{
cin>>cases;
while(cases--)
{
Find=0;
cin>>n;
memset(answer,'\0',sizeof(answer));
for(int i=1; i<=n; ++i)
scanf("%s",a[i]);
for(int i=1; i<=60; ++i)
{
for(int j=0; j<=60-i; ++j)
{
int flag=1;
len=0;
for(k=j;; k++)
{
temp[len++] = a[1][k];
if(len == i)
break;
}
temp[len]='\0';
//printf("%s\n",temp);
for(k=2; k<=n; ++k)
{
if(!strstr(a[k],temp))
{
flag=0;
break;
}
}
if(flag)
{
Find=1;
if(strlen(answer)<strlen(temp))
strcpy(answer,temp);
else if(strcmp(answer,temp)>0)
strcpy(answer,temp);
}
}
}
if(!Find||strlen(answer)<3)
{
cout<<"no significant commonalities"<<endl;
}
else
{
printf("%s\n",answer);
}
}
return 0;
}