KMP

KMP算法

模式(Pattern)匹配,模式串就是子串,解决的是查找子串在主串中出现的位置。

暴力算法

暴力算法是对主串的每一位都进行检测,能否与模式串的第一位匹配,两层循环,最坏复杂度是O(mn)。

极端情况下,如00000000000001,和000001,每次匹配都是到最后一位才发现1和0不等,然后又重新比较,因此耗时大。

KMP思想

如果已经匹配好相等的序列里,有【后缀】 是某个【前缀】,直接把模式串向前滑动到【模式串的前缀】和【原串后缀】对齐的位置即可。

比如:

a b c d e f g

a b c g

匹配到第四位失败了,模式串应该直接向前移动三位

但是如果是:

a b a d e f g

a b a e

匹配到第四位失败了,模式串应该向前移动两位

如果是:

a a a a a a b

a a a b

匹配到第四位失败了,模式串应该向前移动


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!