码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2203

时间:2017-08-21 14:48:38      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:ast   scan   main   hdu 2203   eof   als   strlen   print   ++   

题意:给两个字符串s1与s2,让s1循环移位看s2能否能成为s1的子串。

题解:让s1增长一倍,看s2是否是s1的子串。

 

代码:

#include <cstdio>
#include <cstring>
int next[110000];
char
a[210000],b[110000];
void
Get_next(int *next,char *str){
    int
i,j;
    i=0;
    j=next[i]=-1;
    while
(i<strlen(str)){
        if
(j==-1||str[i]==str[j]){
            next[i+1]=j+1;
            i++;
            j++;
        }

        else
j=next[j];
    }
}

bool
kmp(int *next,char *str1,char *str2){
    int
i,j;
    i=j=0;
    int
last;
    int
len1=strlen(str1),len2=strlen(str2);
    while
(i<len1){
        if
(j==-1||str1[i]==str2[j]){
            i++;
            j++;
        }

        else
j=next[j];
        if
(j==len2)    return true;
    }

    return
false;
}

int
main(){
    while
(scanf("%s%s",a,b)!=EOF){
        int
n=strlen(a);
        memset(next,0,sizeof(next));
        Get_next(next,b);
        for
(int i=0;i<n;i++)    a[n+i]=a[i];
        if
(kmp(next,a,b))    printf("yes\n");
        else
printf("no\n");
        memset(a,0,sizeof(a));
        memset(b,0,sizeof(b));
    }

    return
0;
}

hdu 2203

标签:ast   scan   main   hdu 2203   eof   als   strlen   print   ++   

原文地址:http://www.cnblogs.com/LMissher/p/7403988.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!