KMP算法小记

前言

首先已知暴力解法。

暴力解法会遇到一个问题,就是模式串相对于主串匹配时只右移一位,如何才能保证每次尽可能多地移动,但又不会影响字符串匹配时的准确度呢?诸多字符串匹配算法都是为了解决这个问题而产生的。

KMP算法

kmp算法的核心是根据模式串生成一个next数组,对应模式串中的不同位置(index),next中会对应一个相应的值。在模式串匹配过程中,记录遇到的第一个坏字符在模式串中的位置 i ,以及此时位置对应的next[i], 就可以得出移动的位数:
L = i − n e x t [ i ] L = i- next[i] L=inext[i]
所以重点是next数组的求法,目前我看到一种是最长匹配前缀字串的长度,一种是最长匹配前缀字串结尾对应的下标,两者是差1的关系(假如“aba”是所谓的最长匹配前缀字串,那么它的长度为3,结尾数对应下标为2),上文中提到的公式,使用的是以“长度”为next数组值时的写法。

next数组的求法:

暴力算法很简单。
动态规划的算法下次再补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值