poj 3080 Blue Jeans

题目大意是:给你几个DNA序列,让你找到最长的公共子序列。这题的数据量不大,可以用暴搜,就是用到了一个字符串处理函数strstr,它是查找子串在字符串中的位子的,返回值为子串首字母的下标。记下这题留待以后参考.

代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int n,m,i,j,k,sum;
    char str[14][65];
    char s[65],st[65];

    scanf("%d",&n);
    while(n--)
    {
        scanf ("%d",&m);
        getchar();
        for (i=0;i<m;i++)
        {
            scanf("%s",str[i]);
            //printf("%s\n",str[i]);
            getchar();
        }

        int len = strlen(str[0]);
        int maxx=0;
        for(i=0;i<len;i++)
        {
            for(j=i;j<len;j++)
            {
                sum=0;
                for(k=i;k<=j;k++)
                s[sum++]=str[0][k];
                s[sum]=0;
                for(k=1;k<m;k++)
                if(strstr(str[k],s)==0)break;
                if(k==m&&sum>maxx)
                {
                    maxx=sum;
                    strcpy(st,s);
                }
                else if(k==m&&sum==maxx)
                {
                    if(strcmp(st,s)>0)
                    strcpy(st,s);
                }
            }
        }
        if(maxx<3)
        printf("no significant commonalities\n");
        else
        printf("%s\n",st);
    }
    return 0;
}
posted @ 2012-04-23 19:58  Misty_1  阅读(180)  评论(0编辑  收藏  举报