字符串基础_扩展KMP

时间:2023-01-03 16:19:47

母串:S 子串:T

extend[i]=LCP(S[i..n],T)

next[i]=LCP(T[i..n],T)

假设extend[1..k]已计算出,现计算extend[k+1]

P=max{I+extend[I]-1} (I=1..k)

并令使P取最大值的Ia

则有

S[a..p]=T[1..p-a+1]

è      S[k+1..p]=T[k-a+2,p-a+1]

 

L=next[k-a+2]

那么从Tk-a+2位起有L位与T[1..L]相同

如图所示:

字符串基础_扩展KMP

K+L<P,那么不需比较即可知extend[k+1]=L

K+LP,则P-K=Len 即为已知的匹配长度,且T[1..Len]一定与S[k+1..P]匹配

那么从S[p+1]T[Len+1]开始匹配,得到extend[k+1](同时更新a)