找最长的公共字串,暴搜呀,
先将字符串按长度从短到长排序,枚举最短的字符串的子串,判断是否都是别的字符串的子串,求出最大长度即可
什么反串之类的,其实在枚举最短字串的时候,多定义一个字符串再一起赋值就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; }