テンプレートの使用
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。 } }