学习分享-字符串匹配—KMP算法

本文介绍了KMP算法,一种用于字符串匹配的高效算法。KMP算法通过next数组记录模式串的局部匹配信息,避免了暴力匹配中的重复比较,降低了时间复杂度到O(m+n)。文章详细讲解了next数组的概念、计算方法,并给出了KMP算法的整体实现代码,最后通过一个洛谷例题展示了KMP算法的应用。
摘要由CSDN通过智能技术生成

什么是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字符串,下面我们就来进行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值