虽然说很简单,但我犯了很多错
第一个错是应该从1开始枚举,不小心写成了2;
第二错是strstr是看后面是前面的子集;
第三个错是没有清空s;
代码如下
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char a[15][65];
char s[65],temp[65];
int main()
{
int t;
scanf("%d",&t);
while(t--){
memset(s,0,sizeof(s));
int m;
scanf("%d",&m);
for(int i=0;i<m;i++)
scanf("%s",a[i]);
int l=60,t=0;
while(l){
for(int i=0;i<=60-l;i++){
int len=0;
for(int j=i;;j++){
temp[len++]=a[0][j];
if(len==l) break;
}
temp[l]='\0';
bool flag=true;
for(int j=1;j<m;j++){
if(!strstr(a[j],temp)){
flag=false;
break;
}
}
if(flag){
if(t==1){
if(strcmp(s,temp)>0){
strcpy(s,temp);
}
}
if(t==0){
strcpy(s,temp);
t=1;
}
}
}
if(strlen(s)>0) break;
l--;
}
if(strlen(s)>=3)
printf("%s\n",s);
else
printf("no significant commonalities\n");
}
}