找最长的公共字串,暴搜呀,
先将字符串按长度从短到长排序,枚举最短的字符串的子串,判断是否都是别的字符串的子串,求出最大长度即可
什么反串之类的,其实在枚举最短字串的时候,多定义一个字符串再一起赋值就OK了,看代码吧
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char s[105][105];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m=100000,l;
scanf("%d",&n);getchar();
for(int i=0;i<n;i++)
{
scanf("%s",s[i]);
if(strlen(s[i])<m)
{
m=strlen(s[i]);
l=i;
}
}
char os[105],ps[105],ans=0;
for(int i=0;i<strlen(s[l]);i++)
{
for(int j=i;j<strlen(s[l]);j++)//变量i和j 用来枚举字串的首和尾
{
int b=0;
for(int k=i;k<=j;k++)//枚举最短字串的长度,正串和反串
{
os[b++]=s[l][k];
ps[j-k]=s[l][k];
}
os[b]='\0';ps[j-i+1]='\0';
int flag=1;
for(int k=0;k<n;k++)
{
if(!strstr(s[k],os)&&!strstr(s[k],ps))//正串和反串都没有在字符串在出现
{
flag=0;break;
}
}
if(flag&&ans<strlen(ps))
ans=strlen(ps);
}
}
printf("%d\n",ans);
}
return 0;
}