kmp算法-理论

zy1992 zy1992     2022-11-15     135

关键词:

今天刷leetcode,发现28-实现strStr()这道题,可以使用KMP算法实现,所以去百度了一翻,做个记录。

KMP算法简介:是一种改进的字符串匹配算法。

核心思想:通过匹配失败后的信息,尽量减少模式串与主串的匹配次数来达到快速匹配的目的。

leetcode题目:给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。

1.自己写的算法:

假设 haystack 为  BBC ABCDAB ABCDABCDABDE

        needle   为   ABCDABD

思路:haystack 的下标为i,needle 的下标为j,当haystack .charAt(i)==needle .charAt(j)时,比较haystack i+1和needle j+1的值,如果都相同,那么返回下标

2.KMP算法:

该算法是对上述情况的优化,假设当i=4时,haystack 为   BBC ABCDAB ABCDABCDABDE  ,此时‘ ‘!=‘D‘,那么就要进行下次比较,i++,一直到i=8

                    needle    为           ABCDABD

时,又开始进行新一轮的比较

2个字符串之间进行判断是否相等。那么我们可以通过观察发现,i=8和i=4,AB为ABCDAB的前缀和后缀中最大共有元素的长度。

也就是说,当i=4,haystack 截取needle个数的字符串,为“ABCDAB ”,当判断到i=10时,失败了,那么此时,我们可以通过求i=9时,i从4到9的最大模式字串,为2,

那么我们就可以移动,移动位数 = 已匹配的字符数 - 对应的部分匹配值=6-2=4,i=8,进行下一轮的判断,中间的i=5,i=6,i=7可以省略

那么此时,我们需要求一下,needle    中每个下标的最大模式字串

技术分享图片

那么对应的长度为,0  0  0  0  1  2  0

下一篇,讨论代码

 

kmp算法

KMP算法KMP算法的简介  KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,简称KMP算法。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现... 查看详情

什么是kmp算法?kmp算法推导

 花了大概3天时间,了解,理解,推理KMP算法,这里做一次总结!希望能给看到的人带来帮助!!1.什么是KMP算法?在主串Str中查找模式串Pattern的方法中,有一种方式叫KMP算法KMP算法是在模式串字符与主串字符匹配失配时,... 查看详情

kmp算法

什么是KMP算法?KMP算法推导花了大概3天时间,了解,理解,推理KMP算法,这里做一次总结!希望能给看到的人带来帮助!!如果你觉得有帮助,欢迎分享给其他人!送人玫瑰手有余香!  欢迎留言,哪怕一个字,大家的鼓励... 查看详情

kmp算法

这篇文章想简单讲讲KMP算法的内容。KMP算法KMP算法由Knuth–Morris–Pratt三个人共同提出,它的目的是判断字符串A中是否包含另一个字符串B(如:判断abababaababacb中是否包含ababacb)。KMP算法流程KMP下面演示一下KMP的流程。假设我们... 查看详情

kmp算法

参考:字符串匹配的KMP算法TheKnuth-Morris-PrattAlgorithminmyownwordsKMP算法详解从头到尾彻底理解KMP关键字:KMP算法面试字符匹配模式匹配推荐阮一峰的讲解,清晰明了。 查看详情

kmp算法(代码片段)

KMP算法写OJ时做到字符串匹配问题,用暴力算法结果超出时间限制了,其实早就知道这种问题可以用kmp算法解决,但是我一直懒得学,于是借助这个OJ来记录一下学习kmp算法的一些个人理解文章目录KMP算法字符串匹... 查看详情

kmp算法(代码片段)

KMP算法写OJ时做到字符串匹配问题,用暴力算法结果超出时间限制了,其实早就知道这种问题可以用kmp算法解决,但是我一直懒得学,于是借助这个OJ来记录一下学习kmp算法的一些个人理解文章目录KMP算法字符串匹... 查看详情

扩展kmp算法

扩展KMP算法什么是扩展KMP?扩展kmp是求模式串和主串的每个后缀的最长公共前缀长度。扩展KMP算法是利用前面的已知条件降低多余匹配,达到缩短时间的算法。扩展KMP算法目的是得到next数组和extend数组。next[i]表示的是从自己的... 查看详情

kmp算法

KMP算法思路分析:先得到字串的部分匹配表,使用部分匹配表完成KMP的算法匹配部分匹配表:利用前缀和后缀完成  移动位数为:已经匹配的字符-对应的部分匹配值前缀和后缀案例:  前缀和后缀案例2:  K... 查看详情

kmp算法

KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,... 查看详情

kmp算法小结

最近看了一些关于KMP算法的资料,在此写一篇博客总计一下。1.KMP算法介绍KMP算法是一种字符串搜索的改进算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法... 查看详情

kmp算法(代码片段)

KMP算法给定文本串A、模式串B,求模式串B在文本串A中出现的次数。设文本串A的长度为n,模式串B的长度为m暴力:二重循环+回溯复杂度O(n*m)KMP:将复杂度优化到O(n+m)本篇文章是我初学KMP算法所写,如果有错误欢迎指出另外本文的KM... 查看详情

kmp算法

KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是相较于其他模式匹配算法,该算法晦涩难懂,... 查看详情

kmp算法(代码片段)

KMP算法KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达... 查看详情

kmp算法

...这个最好理解转载自:http://www.matrix67.com/blog/archives/115KMP算法详解    如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段。    我们这里说的KMP不是拿来放电影的(虽然我很喜... 查看详情

kmp算法

转自http://blog.csdn.net/joylnwang/article/details/6778316/KMP算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法。但是... 查看详情

详解kmp算法

KMP算法应该是每一本《数据结构》书都会讲的,算是知名度最高的算法之一了,但很可惜,我大二那年压根就没看懂过~~~之后也在很多地方也都经常看到讲解KMP算法的文章,看久了好像也知道是怎么一回事,但总感觉有些地方自... 查看详情

kmp算法

...---------------------------------------"mynameistheporterofnature"介绍KMP算法是用于字符串匹配问题的,它利用一种巧妙而又不失逻辑的方法去减少算 查看详情