ekmpテンプレート

テンプレートの使用

LL enext [MAXN]、[MAXN]延びます。
チャーS [MAXN]、T [MAXN]。

ボイド GETNEXT(チャー *のT)
{ 
    int型 LEN = STRLEN(t)は、A = 0 
    enextは[ 0 ] = LEN。
    一方(<len- 1 && T [A] == T [A + 1 ])A ++ 
    enext [ 1 ] = = 1 ;
    int型 K = 2 k個++; K <LEN 
    { 
        int型 - P = A + enext [A] 1、L = enext [K- A]。
        もし((K- 1)+ L> = P)
        { 
            int型 J =(P-K + 1)> 0(P-K + 1):0 一方 ++(K + J <LEN && T [K + J] == T [J])J 
            enext [K] = J。= K。
        } 
        
            enext [k]は = Lと、
    } 
} 

ボイド getextend(CHAR * sで、チャー *のT)
{ 
    int型 SLEN = STRLEN(S)、TLENの=のSTRLEN(t)は、A = 0 
    GETNEXT(T)。
    int型 MINLEN = SLEN <TLEN?SLEN:TLEN。
    一方 ++(<MINLEN && S [A] == T [A])、A 
    延び[ 0 ] = = 0 ;
    以下のためにint型のk = 1 ; K <SLENあり、k ++ 
    { 
        int型、P = A + [A]延び- 1、L = enext [K- A]。
        もし((K- 1)+ L> = P)
        { 
            int型 J =(P-K + 1)> 0(P-K + 1):0 同時に(K + J <SLEN && J <TLEN && S [K + J] == T [J])J ++ 
            [k]が延び = J。= K。
        } 
        そう
            [k]が延び = L。
    } 
}

 

おすすめ

転載: www.cnblogs.com/benzikun/p/11261571.html