KMP模板匹配算法——六步搞定KMP
KMP算法——六步搞定KMP 1.什么是KMP KMP 算法是 D.E.Knuth、J,H,Morris 和 V.R.Pratt 三位大佬共同提出的,称之为 Knuth-Morria-Pratt 算法,简称 KMP 模板匹配算法。该算法相对于 Brute-Force(暴力)算法有比较大的改进,主要是消除了主串指针的回溯,提高时间效率。(空间换时间) 2.KMP与朴素模板匹配(Brute-Force) 暴力法Brute-Force 这个就是超级简单的逐一遍历比较。。。。 给定字串 S,T , 将 T 与 S 的第一个 长度与T 一样的字串比较,成功就返回匹配的第一个索引 不成功,则继续匹配 S 的下一个 长度与T 一样的字串 ……重复遍历每一个长度与 T 一样的字串,并匹配 这样的时间复杂度是O(n*m)。 KMP模板匹配算法——可以实现复杂度为O(m+n) 第一步:先了解什么是前缀后缀字串 比如: abcjkdabc,那么这个数组的最长前缀和最长后缀相同——必然是abc。 cbcbc,最长前缀和最长后缀相同——是cbc。 abcbc,最长前缀和最长后缀相同,是不存在的。 注意最长前缀:是说以第一个字符开始,但是不包含最后一个字符。 第二步,理解关于字符串匹配的规则 假设 S与T要进行匹配 ,匹配规则如图 这里aba就是最长前缀字串,然后下一次a是最长前缀字串 借别人的图示意: