hdu2594kmp

来源:互联网 发布:淘宝摩托车准备店铺 编辑:程序博客网 时间:2024/06/14 02:52

题意:

给定两个字符串p和s,求字符串p的前缀和字符串s的后缀能匹配的最大长度,并输出匹配的子串

思路:

把s连接在p的后面,对新的字符串p求next数组,

#include <cstdio>#include <cstring>const int maxn = 100005;char p[maxn];int len,next[maxn];void getnext(char* p){    next[1] = 0;    int k = 0;    for(int i=2;i<=len;i++)    {        while(k!=0 && p[k+1]!=p[i]) k = next[k];        if(p[k+1] == p[i]) k++;        next[i] = k;    }}int main(){    while(scanf("%s",p+1)!=EOF)    {        len = strlen(p+1);        p[++len] = '$';        scanf("%s",p+len+1);        len+= strlen(p+len+1);        getnext(p);        for(int i=1;i<=next[len];i++)        {            printf("%c",p[i]);        }        if(next[len]) printf(" ");        printf("%d\n",next[len]);    }    return 0;}

0 0
原创粉丝点击