母串: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)

相关文章:

  • 2022-01-05
  • 2021-07-20
  • 2022-12-23
猜你喜欢
  • 2021-06-30
  • 2022-12-23
  • 2021-05-19
  • 2021-12-29
  • 2021-06-21
  • 2021-06-19
相关资源
相似解决方案