字符串匹配问题(前缀表实现kmp、bmh、指纹思想)

本文介绍了字符串匹配的三种方法:使用前缀表实现的KMP算法,Bad-Character Heuristic (BMH)算法,以及指纹思想。详细阐述了KMP算法中next数组的新求法,BMH算法的偏移表概念,以及指纹算法在数字字符串和哈希指纹中的应用。这些算法在匹配过程中提高了效率,减少了不必要的回退。
摘要由CSDN通过智能技术生成

前言

之前写过一次kmp,当时采取的是比较常见的通过匹配来计算next数组,
当时的那个确实很麻烦,这次我们给出一个更好的算法。
之前的next数组求法是这样的:(给一下连链接在这里插入图片描述
然后我们将带来新的字符串匹配算法,并且给出几种简单的算法

求next数组的新方法

先复习一下kmp算法:
正常的匹配是如果匹配失败就将子串和主串都进行回退,然后重新开始匹配,但我们并不认为我们一定需要回退到子串的开始处,所以我们给出了next数组,来减少回退的程度

输入主串T(长n),和子串P(长m),寻找子串和主串匹配成功的起始位置。
我们这里的kmp算法和之前还是有很多的不一样,而且个人感觉这种方式更容易理解。

这里我们计算next数组采取的方式为前缀法:

  • 我们需要将数组的0位补上0,作为边界条件
  • 从第一个字符开始,每次将串增多一个,将其不包括本身的前缀和后缀都找出来,找到其中最长的相同前后缀。

我们看一下pappar的例子吧。
我们从p开始,因为不能和本体重复,所以没有前后缀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值