扩展KMP算法用处:
问题定义:给定两个字符串S和T(长度分别为n和m),下标从0开始,定义extend[i]
等于S[i]...S[n-1]
与T的最长相同前缀的长度,求出所有的extend[i]
。举个例子,看下表:
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
S | a | a | a | a | a | b | b | b |
T | a | a | a | a | a | c | ||
extend[i] | 5 | 4 | 3 | 2 | 1 | 0 | 0 | 0 |
为什么说这是KMP算法的扩展呢?显然,如果在S的某个位置i有extend[i]
等于m,则可知在S中找到了匹配串T,并且匹配的首位置是i。而且,扩展KMP算法可以找到S中所有T的匹配。接下来具体介绍下这个算法。
一:算法流程
(1)