kmp字符串匹配
文章目录 1. what is kmp? 2.暴力算法 2.1 暴力中的暴力 2.2 暴力中的优化 3.kmp算法 3.1 数组定义 3.2 关于kmp难以理解的原因简要分析 3.3 next数组的预处理 3.4 next数组的应用 4. kmp时间复杂度证明 5.模板题代码 6.写在最后 1. what is kmp? k m p kmp k m p 是一种字符串匹配算法,用于在 s s s 串中找到所有连续子串 t t t 由K什么,M什么,P什么三个人提出,所以叫 k m p kmp k m p 2.暴力算法 2.1 暴力中的暴力 如果是暴力的做法,我们会怎么做? 就直接拿 s s s 的每一位当开头,然后往后走,就像这样 比如说我们现在我们要在 a b c a b a a b a b a a abcabaababaa a b c a b a a b a b a a 串中找 a b a b abab a b a b 那么暴力的做法显然就是这个样子的 但是这样肯定会很慢,复杂度 O ( ∣ s ∣ ⋅ ∣ t ∣ ) O(|s|\cdot |t|) O ( ∣ s ∣ ⋅ ∣ t ∣ ) 但是他慢在哪里了呢? 比如说在第四步的时候,我们发现a和c不匹配,但是我们接下来还是一步一步的跳到了第七步,但是因为第一个字符是a,很明显他不可能和b或者c匹配