zoukankan      html  css  js  c++  java
  • poj 3080 PKU 3080 Blue Jeans(kmp)

    #include<stdio.h>
    #include<string.h>
    const int N=100;
    int n,m,next[N];
    char dna[N][N];
    void get_next(char *str,int len)
    {
    
        next[0]=-1;
        int j=0,k=-1;//k记录next[];
    
        while(j<len)
        {
            if(k==-1||str[j]==str[k])
            {
                k++;
                j++;
                if(str[k]!=str[j])
                    next[j]=k;
                else next[j]=next[k];
    
            }
            else k=next[k];
        }
    }
    int kmp(char *s,int slen)
    {
    
        get_next(s,slen);
        int f=0,j,k,i;
        for(i=1;i<m;i++)
        {
           int k=0, j=0;
           int len=strlen(dna[i]);
            while(j<len&&k<slen)
            {
                if(k==-1||s[k]==dna[i][j])
                {
                    j++;
                    k++;
                }
                else k=next[k];
            }
            if(k<slen)break;
    
        }
        if(i==m)return 1;
        else return 0;
    }
    
    int main()
    {
        int i,j,k,sum,max=-1;
        char s[63],ans[63];
        scanf("%d",&n);
        while(n--)
        {
            max=-1;
            scanf("%d",&m);
            getchar();
            for(i=0;i<m;i++)
            {
                gets(dna[i]);
            }
            int len=strlen(dna[0]);
    
            for(i=0;i<len;i++)
            {
                for(j=i;j<len;j++)
                {
                    sum=0;
                    for(k=i;k<=j;k++)
                    {
                        s[sum++]=dna[0][k];
                    }
                    s[sum]='\0';
                    if(kmp(s,sum)==1)
                    {
                        if(sum>max)
                        {
                            strcpy(ans,s);
                            max=sum;
                        }
                        else
                        {
                            if(max==sum&&strcmp(ans,s)>0)
                            {
                                strcpy(ans,s);
                            }
                        }
                    }
                }
            }
            if(max<3)printf("no significant commonalities\n");
            else  printf("%s\n",ans);
    
    
        }
    
    }
    

      

  • 相关阅读:
    Python编程-数据库
    Django框架之自定义分页
    Python编程-多线程
    Python编程-多进程二
    慕课学习--OSI与TCP/IP网络协议
    VMwaretools、共享文件夹、全屏
    Linux--慕课学习
    随想
    Linux--初次体验
    正则表达式——初次尝试
  • 原文地址:https://www.cnblogs.com/acSzz/p/2398596.html
Copyright © 2011-2022 走看看