hdu 2203 kmp 模板题

来源:互联网 发布:做网络销售的聊天技巧 编辑:程序博客网 时间:2024/05/16 12:13
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#define MAX 100007using namespace std;char s1[MAX<<1],s2[MAX];void get_next ( char p[] , int next[] ){    int len = strlen ( p );    int i = 0 , k = -1;    next[0] = -1;    while ( i != len )    {        if ( k == -1 || p[i] == p[k] )             i++,k++,next[i] = k;        else k = next[k];    }}bool match ( char s[] , char p[] ){    int next[MAX];    get_next ( p , next );    int i = 0 , j = 0;    int len1 = strlen ( s );    int len2 = strlen ( p );    while ( i < len1 )    {        if ( j == -1 || s[i] == p[j] ) i++,j++;        else j = next[j];        if ( j == len2 ) return true;    }    return false;}int main ( ){    while ( ~scanf ( "%s" , s1 ) )    {        scanf ( "%s" , s2 );        int len = strlen ( s1 );        for ( int i = len ; i < 2*len ; i++ )            s1[i] = s1[i-len];        s1[2*len] = 0;        if ( strlen(s1) < strlen(s2) || !match ( s1 , s2 ) )            puts ( "no" );        else puts ( "yes" );    }}

0 0
原创粉丝点击