KMP算法
算法的核心有以下两点:
1. 移动位数= 已匹配的字符数- 对应部分匹配值
2. 部分匹配表的计算
以在StringstrSrc = ”ababcabcacbab”中寻找子串String strSub = ”abcac”为例进行说明
根据计算可知abcac的部分匹配表为:(部分匹配表的计算过程将在最后给出)
a | b | c | a | c |
0 | 0 | 0 | 1 | 0 |
第一次匹配如下:
strSrc: a b a b c a b c a c b a b
strSub: a b c
在红字处不匹配,此时已匹配字符为”ab”,已匹配字符数为2。
对应部分匹配值可根据部分匹配表查到对应的值。在第一次匹配中c匹配失败,其对应的匹配值为0。
根据公式有:移动位数 = 2– 0 = 2;strSub右移两步进行第二次比较:
第二次匹配如下:
strSrc: a b a b c a b c a c b a b
strSub: a b c a c
在红字处不匹配,此时已匹配字符为”abca”,已匹配字符数为4。
对应部分匹配值可根据部分匹配表查到对应的值。在第一次匹配中c匹配失败,其对应的匹配值为0。
根据公式有:移动位数 = 4– 0 = 4;strSub右移四步进行第二次比较:
第三次匹配如下:
strSrc: a b a b c a b c a c b a b
strSub: a b c a c
匹配完成