KMP算法

理论基础

KMP算法使用

KMP算法一般用于解决字符串匹配的问题。给定一个文本串和模式串,判断模式串是否存在于文本串中,存在返回第一个匹配字符的下标。对于这类问题,暴力求解的复杂度一般为O(m*n); m,n分别为文本串和模式串的长度。但KMP的时间复杂度为O(m+n), 其中m的部分是遍历文本串,而n的部分包含了构建next数组

基本思想

最基本的匹配思想是,当遇到冲突字符时,只会将模式串向后移动,重头开始匹配。而KMP算法是从冲突的位置跳到之前能匹配到的内容

之前能匹配到的内容如何确定?

因为冲突位置不匹配,而冲突位置之前的子串,其实都是匹配的。那么其实就是想要不只后移一次,要后移很多次。那么就是想要移动多次,使得子串的前缀能够和冲突位置之前的那部分匹配上 ,而这部分就是子串的后缀。所以我们想要的移动到的位置就是:这个前缀后面的一个位置

为了求这个位置,我们需要最长相等前后缀有多长 

前缀表

前缀表就是用来存储最长相等前后缀的长度。

前缀:包含首字母,不包含尾字母的子串;后缀:包含尾字母,不包含首字母的子串

而这个长度其实就是前缀后面的位置,如果i

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值