简介
KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt由共同提出,称之为 Knuth-Morria-Pratt 算法,简称 KMP 算法。该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯,从而使算法效率有了某种程度的提高。
核心思路
假设字符串 a s d d s s d f d s d f d f s , 想要匹配字符串 s d f d s;
拿到字符串,对每个字符做区分,分为: s, sd, sdf,sdfd,sdfds
找到每个字符串的 前缀与后缀相等的最大长度: (例:sdfd: s d f d 为1 , sdfds: s d f d s 为2)
s:0,sd:0,sdf:0,sdfd:1,sdfds:2
原字符串 a s d d s s d f d s d f d f s,
索引 0 1 2 3 4
目标字符串 s d f d s
maxL 0 0 0 1 2
nextL -1 0 0 1 2
此时,可以去掉maxL,并对目标字符串与原字符串从第0个字符进行匹配
原字符串 a s d d s s d f d s d f d f s,
索引 0 1 2 3 4
目标字符串 s d f d s
nextL -1 0 0 1 2
当匹配不正确时,nextL为-1则整体向右移动1格;nextL为其他数字,则索引的数字及对应的字符移动到nextL中与索引相同的数字的位置