![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串匹配算法
文章平均质量分 86
qzyxff_csdn
这个作者很懒,什么都没留下…
展开
-
暴力匹配算法
针对问题: 给定一个源文本串S,和一个模式匹配串P,需要查找P在S中第一次出现的下标位置。 若P在S中存在,则返回下标值;若P在S中不存在,则返回-1。算法思路: - 如果当前字符匹配成功,即 S[i]==P[j],则i++,j++,继续匹配下一个字符 - 如果当前字符匹配失败,即 S[i]!=p[j],则i回溯到i-(j-1),j被重置为0。代码://javaint转载 2017-11-12 17:28:41 · 504 阅读 · 0 评论 -
BM算法
在字符串匹配算法中,KMP算法并不是效率最高的,这里将介绍的是BM算法。BM算法是指模式串与源文本串的比较从右到左,其本质是对后缀蛮力匹配算法的改进。该算法在最坏情况下的时间复杂度为O(N)。前提基础 了解什么是坏字符,什么是好后缀。坏字符:当源文本串中的某个字符跟模式串的某个字符不匹配时,称源文本串中的这个失配字符为坏字符。好后缀:源文本串与模式串具有的最长原创 2017-11-19 14:51:33 · 653 阅读 · 0 评论 -
理解KMP
初时KMP算法 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同时发现,因此人们称它为克努特——莫里斯——普拉特操作(简称KMP算法)。KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是实现一个next()函数,函数本身包含了模式串的局部匹配信息。时间复杂度O(m+n)。转载 2017-11-14 16:45:27 · 175 阅读 · 0 评论 -
从头到尾彻底理解KMP
优化KMP算法 对KMP算法已经有了认识, 下面让我们使用KMP算法,来了解KMP的匹配流程。 例子:源文本串S为 "abacababc",模式串P为 "abab"。 next数组表如下: 若当前程序已经匹配到如下所示的地方。根据next数组,能够判断下一次将进行s[3]与p[1]的比较,这一结果必然失败。为转载 2017-11-15 17:01:15 · 198 阅读 · 0 评论