KMP算法详解及模板

本文详细介绍了KMP算法的工作原理,通过一个实例展示了如何利用部分匹配表提高字符串匹配的效率。KMP算法避免了回溯,通过计算前缀和后缀的最长公共长度来决定搜索词的移动位数,从而在不匹配时依然保持较高的搜索速度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

KMP是一个用于字符串匹配的算法,用于求解串str2是否在串str1中出现并返回出现的位置(str1的长度>=str2的长度)

 

由于<cstring>里内置的子串查找函数时间复杂度太高(BF算法时间复杂度O(n*m)),所以数据过大时得手写kmp(O(n+m))

 

先理清楚2个概念

        1.前缀和后缀

            这是百度百科的解释

汉语里指在词根前面的构词成分。如“阿哥”、“阿姨”中的“阿”,英文中指一个英语单词可以分为三个部分:前缀(prefix),词根(stem)及后缀(suffix)。单词中位于词根前面的部分就是前缀。前缀,可以改变单词的意思。

        引申到串里,如果串的长度为leng ,那这个串的前缀就可以是从str[0]到str[leng-1]中的任何一组

        比如说一个串abcdef        那么它的前缀和后缀可以是下面几种情况

                     前缀                                   后缀     

                    abcde                                bcdef

                    abcd                                  cdef

                    abc                                    def

                    ab                                      ef

                    a                                        f

2.next数组

      &nb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值