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

ekmp模板

时间:2019-07-29 00:53:34      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:char   for   kmp   while   col   else   div   lse   get   

模板,自己用

ll enext[maxn],extend[maxn];
char s[maxn],t[maxn];

void getnext(char *t)
{
    int len=strlen(t),a=0;
    enext[0]=len;
    while(a<len-1 && t[a]==t[a+1]) a++;
    enext[1]=a;
    a=1;
    for(int k=2;k<len;k++)
    {
        int p=a+enext[a]-1,L=enext[k-a];
        if((k-1)+L>=p)
        {
            int j=(p-k+1)>0 ? (p-k+1) : 0;
            while(k+j<len && t[k+j]==t[j]) j++;
            enext[k]=j;
            a=k;
        }
        else
            enext[k]=L;
    }
}

void getextend(char *s,char *t)
{
    int slen=strlen(s),tlen=strlen(t),a=0;
    getnext(t);
    int MinLen = slen < tlen ? slen : tlen;
    while(a<MinLen && s[a]==t[a]) a++;
    extend[0]=a;
    a=0;
    for(int k=1;k<slen;k++)
    {
        int p=a+extend[a]-1, L=enext[k-a];
        if((k-1)+L>=p)
        {
            int j=(p-k+1)>0 ? (p-k+1) : 0;
            while(k+j<slen && j<tlen && s[k+j]==t[j]) j++;
            extend[k]=j;
            a=k;
        }
        else
            extend[k]=L;
    }
}

 

ekmp模板

标签:char   for   kmp   while   col   else   div   lse   get   

原文地址:https://www.cnblogs.com/benzikun/p/11261571.html

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