字符串之KMP算法

来源:互联网 发布:网络打印机共享设置 编辑:程序博客网 时间:2024/05/21 06:54

KMP算法用于字符串匹配

比如 如何在 abdasjfasdfnadj   中判断是否存在sjf,以及匹配的位置

容易想到的是将sjf挨个与母串进行匹配,当不匹配时,子串右移一位,继续挨个匹配,这样的话,复杂度为O(mn)

可以发现,这个暴力的方法中存在一些重复,子串右移一位,相当于忽略了上次匹配时的信息比如:abcdefa 和abd ,发现c与d不匹配的时候可以将子串直接移到c处进行比较的。 又比如abcabddasbcak  和 abcabc 发现c和d不匹配 将子串移到第五位

改进的方法就是用KMP算法

KMP算法利用next数组记录子串的各子串的前后缀相等的最长长度来记录信息,当第几个字母失配时,查表找到该跳到哪个位置

next数组的求法KMP详解

next数组求法详解