ekmp模板

Posted benzikun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ekmp模板相关的知识,希望对你有一定的参考价值。

模板,自己用

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模板的主要内容,如果未能解决你的问题,请参考以下文章

kuangbin专题十六 KMP&&扩展KMP HDU3613 Best Reward(前缀和+manacher or ekmp)

模板初步——定义模板

模板模板参数和模板别名:编译器错误?

C++模板编程入门模板介绍模板定义函数模板类模板模板的继承

类模板三种类模板参数

《c++从0到99》 六 模板