关键词:
今天刷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算法是用于字符串匹配问题的,它利用一种巧妙而又不失逻辑的方法去减少算 查看详情