• HDU 2203 亲串(kmp)


    Problem Description
    随着人们年龄的增长更大,更聪明还是越大越愚蠢,这是一个值,相同的问题Eddy也一直在思考,由于他在非常小的时候就知道亲和串怎样推断了,可是发现,如今长大了却不知道怎么去推断亲和串了,于是他仅仅好又再一次来请教聪明且乐于助人的你来解决问题。
    亲和串的定义是这种:给定两个字符串s1和s2,假设能通过s1循环移位。使s2包括在s1中,那么我们就说s2 是s1的亲和串。
     

    Input
    本题有多组測试数据。每组数据的第一行包括输入字符串s1,第二行包括输入字符串s2,s1与s2的长度均小于100000。


     

    Output
    假设s2是s1的亲和串,则输出"yes"。反之。输出"no"。每组測试的输出占一行。
     

    Sample Input
    AABCD CDAA ASD ASDF
     

    Sample Output
    yes no
     

    Author
    Eddy
     


    就是把第一个串加倍后能不能包括第一个串


    kmp模板


    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    #include<vector>
    
    #define L(x) (x<<1)
    #define R(x) (x<<1|1)
    #define MID(x,y) ((x+y)>>1)
    using namespace std;
    #define N 200005
    
    char a[N],b[N];
    int next[N];
    
    void getfail(char *b)
    {
    	int i,j;
    	i=0,j=-1;
    	next[0]=-1;
    
    	int len=strlen(b);
    	while(i<len)
    	{
    		if(j==-1||b[i]==b[j])
    		{
    			i++;
    			j++;
    			next[i]=j;
    		}
            else
    			j=next[j];
    	}
    }
    
    int kmp(char *a,char *b)
    {
    	int i,j;
    	int lena=strlen(a);
    	int lenb=strlen(b);
    	i=j=0;
    	while(i<lena)
    	{
    		if(j==-1||a[i]==b[j])
    		{
    			i++;
    			j++;
    		}
            else
    			j=next[j];
    
    		if(j==lenb)
    			return 1;
    	}
       return 0;
    }
    int main()
    {
       int i,j;
       while(~scanf("%s%s",a,b))
       {
       	 int len=strlen(a);
       	 for(i=0;i<len;i++)
    		a[len+i]=a[i];
    	 a[i+len]='';
    
    	 getfail(b);
    
    	 if(kmp(a,b))
    		printf("yes
    ");
    	 else
    	    printf("no
    ");
       }
       return 0;
    }
    






    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    OI 知识总览 算法篇 之 动态规划
    LeetCode 16.3Sum Closest
    LeetCode 1.Two sum
    leetCode 15. 3Sum
    leetCode 54. Spiral Matrix
    mybatis(视频)
    mybatis
    spring笔记
    Spring(一)
    Spring(二)
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4738725.html
Copyright © 2020-2023  润新知