kmp算法原理自我理解

用途

用于子串的匹配问题

子串匹配

描述

串A中是否包含串B

解法

  1. 暴力匹配

    1. 从头一个个比较,直到B的末尾。复杂度 O(mn)
  2. kmp

    1. 构建next数组,前缀匹配后缀的长度。

    2. 在匹配失败的时候根据next[i]的值进行跳跃式前进。

    3. 为什么要使用next进行前缀匹配后缀?

      红色a之前的绿色字符串abab是匹配成功的,假如说按照暴力法来解题,过程如下,实际上暴力解法的过程就是一个最长前缀和后缀匹配的过程,kmp只是进行了预处理,计算出最终位置而已,从而节省大量的无用的匹配过程。

      kmp

posted @ 2020-04-03 18:17  vito_wang  阅读(210)  评论(0编辑  收藏  举报