Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 8078 Accepted Submission(s): 3688
2 3 ABCD BCDFF BRCD 2 rose orchid
2 2
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; char str[110][100],s1[110],s2[110];//以字符串数组的方式输入每组测试数据 int main() { int len,min,max,t,n,i,j,k,sign,f; scanf("%d",&t); while(t--) { scanf("%d",&n); min=1000; for(i=0;i<n;i++) { scanf("%s",str[i]); len=strlen(str[i]); if(min>len)//找到最小串 { min=len; f=i; } } len=strlen(str[f]); sign=1;max=0; for(i=0;i<len;i++)//最为标本串子串的头 { for(j=i;j<len;j++)//子串的尾 { for(k=i;k<=j;k++)//复制两个串,顺序串为s1,逆序串为s2; { s1[k-i]=str[f][k]; s2[j-k]=str[f][k]; } s1[j-i+1]=s2[j-i+1]='\0';//以上三个for循环实现了寻找和存储子串,要耐心看懂原理 int len_s=strlen(s1); for(k=0;k<n;k++)//枚举所有串 { if(!strstr(str[k],s1)&&!strstr(str[k],s2))//注意本题求的是每个字符串都有的公共串 { sign=0; break; } } if(len_s>max&&sign) max=len_s; sign=1; } } printf("%d\n",max); } return 0; }