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;
}
posted @ 2012-08-28 23:11  Yogurt Shen  阅读(151)  评论(0编辑  收藏  举报