[字符串匹配] KMP算法

参见阮一峰老师的文章:
http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

Jack Boxer的文章:
http://jakeboxer.com/blog/2009/12/13/the-knuth-morris-pratt-algorithm-in-my-own-words/

记忆的要点:

  1. 匹配方式
    移动位数 = 已匹配的字符数 - 对应的部分匹配值(第一个不匹配的字符的部分匹配值)
  2. 部分匹配表(Partial Match Table)
    "部分匹配值"就是"前缀"和"后缀"的最长的共有元素的长度
  3. 实质
    "部分匹配"的实质是,有时候,字符串头部和尾部会有重复。比如,"ABCDAB"之中有两个"AB",那么它的"部分匹配值"就是2("AB"的长度)。搜索词移动的时候,第一个"AB"向后移动4位(字符串长度-部分匹配值),就可以来到第二个"AB"的位置。

你可能感兴趣的:([字符串匹配] KMP算法)