字符串匹配算法——KMP

搞了整整一天,终于弄懂了!!!!

感觉自己太菜了,脑子转的也慢
多谢这几位大佬的文章!!

图解KMP算法
KMP算法详解-彻底清楚了(转载+部分原创)

难点在我看来有两个,一个比一个难:
1.理解为什么可以让KMP当中主串的 i 指针不动,模式串的 j 指针跳到 k和 主串 i 匹配
2.next函数的的理解

KMP算法是一种字符串匹配算法,用于在一个主中查找一个子的出现位置。它的核心思想是利用已经匹配过的信息,避免不必要的回溯,提高匹配的效率。KMP算法通过构建next数组,来记录子中的每个字符在不匹配时应该回退到的位置。其中,next数组的值表示在对应位置之前的子中,最长可匹配前缀子的下一个字符的位置。 举个例子,假设我们要在主str中查找子sub。当在匹配过程中遇到不匹配的字符时,根据next数组的值将子的指针j回退到合适的位置,然后继续匹配。这样,在匹配过程中,我们不需要重新遍历已经匹配过的部分,而是直接根据next数组的值进行跳跃,提高匹配的效率。 在KMP算法中,next数组的构建是关键步骤。它的计算过程如下:当子的第j个字符与主的第i个字符不匹配时,我们需要找到在子中第j个字符之前的最长可匹配前缀子的下一个字符的位置。这个位置就是next[j。为了找到这个位置,我们可以利用已经计算得到的next数组的值。如果子的第j个字符与第next[j个字符相等,那么我们可以认为在子的第j个字符之前的最长可匹配前缀子的下一个字符的位置就是next[j。如果不相等,我们就继续利用next数组的值进行回溯,直到找到相等的字符或者回退到子的起始位置。 总之,KMP算法通过构建next数组,实现了在匹配过程中的跳跃操作,避免了不必要的回溯,提高了匹配的效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [经典字符串匹配算法——KMP算法](https://blog.csdn.net/aaaaaaaWoLan/article/details/122005602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值