POJ3080-Blue Jeans
http://poj.org/problem?id=3080
最长公共子串,感觉自己写的不错~
#include<stdio.h> #include<string.h> const int maxm=10+2; const int maxs=60+2; int main(void) { int loop,m,len,i,j,k; char p[maxm][maxs],ans[maxs],s[maxs]; scanf("%d",&loop); while(loop--) { scanf("%d",&m); for(i=0;i<m;i++) scanf("%s",p[i]); len=0; for(i=0;i<strlen(p[0]);i++) for(j=i+2;j<strlen(p[0]);j++) { strncpy(s,p[0]+i,j-i+1); s[j-i+1]='\0'; bool ok=true; for(k=1;ok&&k<m;k++) if(strstr(p[k],s)==NULL) ok=false; if(ok&&(j-i+1>len||j-i+1==len&&strcmp(ans,s)>0)) { len=j-i+1; strcpy(ans,s); } } if(len<3) printf("%s\n","no significant commonalities"); else printf("%s\n",ans); } return 0; }