KMP算法用在字符串查找、匹配子串操作中
因为我是初学者,尝试从初学者角度说明一下KMP算法。
规定说明
主串:被匹配串
模式串:目标匹配串
主串长度>模式串
KMP算法的基本思想:利用已经匹配过了的、模式串的 j 个字符 作为已知量,根据这 j 个字符,来确定 i,j的回溯量,避免简单匹配算法的回溯至起点。
已经匹配过了的 j 个字符,是模式串的一个子串。
逻辑分析这个子串,如果能找到,这样一个K值
使 P1 P2 …Pk-1 = Pj-k+1 Pj-k+2 …Pj
那么,我们只需要将 j 回溯到 k-1 位置即可。
(本质上,就是找 该 j 个字符组成的子串中 前面有没有 k 个长度的子串,在后面倒序出现,然后令 j 回溯至 k 位置 即可)
(ps:这样得到的NEXT函数是不完美的,需要对其做出修正。下次更新。水平有限,海涵。)