KM算法理解(一)

本文旨在复习KMP算法,重点解释next数组的作用。next数组用于指示子串在失配后如何移动,避免重复比较。通过示例展示了从1号位和0号位开始构建next数组的过程,并针对特定情况提出改进,帮助理解KMP算法。
摘要由CSDN通过智能技术生成

KMP算法是很早之前学的,当时学完自认为理解的相当清楚清楚了,结果现在就记得怎么这个算法需要一个next数组,至于这个是干啥的,浑然不知。


我今天写的主要目的是复习应试用的,所以直接从正文开始,至于不懂KMP的意思的可以看看别人的博客或问度娘。

首先需要说明的是next数组的作用。next数组与子串是对应的,每一位对应的数字是:当某一位的字符失配后,根据该位所对应next数组中的数值进行移动。

下标  1 2 3  4 5

例     A A A A B 所对应的next数组是【0,0,0,0,4】。则当子串中B失配后,整个子串的移动后,下标为4的字符与失配字符对齐

即                         //   A A A A A B    原串
                            //   A A A A B      失配子串
                             //      A A A A B    移动后子串
                            下标 1 2 3 4 5 6

接一下来我直接就上代码了,我讲不清楚原由,但是我会列出我的手工过程,理解整个流程.
获取next数组
void getNextArr(const char*T, int next[])  {     首先先明确这个字符串是从数组1号位开始保存的,即T[0]为字符串长度。所以对应next也从1开始。
    next[1] = 0;                                   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值