【从零开始】KMP算法解析

00 写在前面

KMP在字符串匹配中是一个很好用的方法,也有很多题目直接考察KMP算法。

这次我们来了解一下KMP算法的代码求解过程。(建议先阅读相关资料了解KMP的手算思路)

01 KMP概述

KMP算法主要用在字符串匹配上。比如查找一个串中是否出现另一个串。

暴力解法就是进行遍历,当不匹配时继续重头再来。而KMP可以记录之前已经匹配过的文本信息,防止出现重复匹配的现象。

了解过KMP算法的小伙伴也知道,KMP最重要的就是求next数组,next数组也可以看作匹配时的信息数组,根据next数组给出的信息可以很好的进行匹配的跳跃。

02 next数组

next数组其实是一个前缀表。严格来说它记录了主串和匹配串不匹配时,匹配串要回到哪里开始重新匹配。

而next数组的核心,就是记录下标i包括i之前的字符串中右多长的相同前缀后缀

相同前缀后缀这点应该很好理解。

比如a的最长相同前缀后缀就是0,aba的最长相同前缀后缀是1,ababa的最长相同前缀后缀是3。

03 匹配过程

前缀表非常的神奇,这个思想在求next数组和匹配过程中都会用到。

举个例子:主串是aabaabaaf,匹配串是aabaaf

PNG图像 23

当遇到不匹配的位置

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值