Substrings
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5707 Accepted Submission(s): 2513
2 3 ABCD BCDFF BRCD 2 rose orchid
2 2//枚举所有的状态,记录最大公共子串长度,注意一些需优化的小细节,如枚举最小的字符串以及注意string库函数的使用#include<iostream> #include<string.h> #include<cstdio> using namespace std; #define MAX 100+2char str[MAX][MAX];
int main() { int t,n,i,j,k; int num; int minlen,minindex,maxcom; scanf("%d",&t); while(t--) { minlen=110; scanf("%d",&n); for(i=0;i<n;i++) { getchar(); scanf("%s",str[i]); if(strlen(str[i])<minlen) { // cout<<"strlen(str[i])="<<strlen(str[i])<<" minlen="<<minlen<<endl; minlen=strlen(str[i]); minindex=i; } }
// printf("_++++++%s\n",str[minindex]); maxcom=0; for(i=0;i<minlen;i++) { for(j=minlen;j>i;j--) { char tstr[MAX],revstr[MAX]; strncpy(tstr,str[minindex]+i,j-i); tstr[j-i]=0; strncpy(revstr,str[minindex]+i,j-i); revstr[j-i]=0; strrev(revstr); num=0; // printf("*%s*%s*\n",tstr,revstr); for(k=0;k<n;k++) { if(k!=minindex) { if(!strstr(str[k],tstr)&&!strstr(str[k],revstr)) break; num++;
} } if(num==n-1) { if(maxcom<j-i) maxcom=j-i; } // goto leap; } }
//leap: printf("%d\n",maxcom); /* cout<<"***************"<<endl; for(i=0;i<n;i++) printf("%s\n",str[i]); cout<<"***************"<<endl; */ } return 0; }