什么是KMP算法?😕
KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) 。
其中KMP算法的核心:next()函数的实现过程。next()函数用来记录最长相等前后缀长度。
KMP算法的运用场景:进行字符串匹配。
字符串匹配的暴力做法😍
当给你一个字符串S1="aabbccaabc" ; S2="aabc",在这里S1我称为匹配的串(长的串),S2称为模板串(短的串),现在这两个字符进行匹配,你是如何做的呢?
在没有KMP算法之前,我们是如何进行字符串匹配的呢?毫不意外的就是咱们最熟悉的模拟暴力算法进行解决。
我们定义两个指针,一个用来指向S1,另一个指向S2,在这里我定义他们的下标都是从1开始的,也可以从0开始,这个是看个人习惯的。同时定义两个数组来记录,S[N],P[M],S[N]是用来储存S1字符串,P[M]是用来存储S2字符串,下面我们就来进行