c++每日练习记录2

题目:在这里插入图片描述

key:KMP算法

KMP (Knuth-Morris-Pratt) 算法是一种高效的字符串匹配算法,用于在一个文本串(主串)中查找一个模式串(子串)。与传统的朴素匹配算法相比,KMP 算法具有更高的效率,因为它避免了不必要的回溯。
KMP 算法的基本思想
避免回溯: 传统方法在发现字符不匹配时,会退回到主串的前面位置重新开始比较,而 KMP 算法利用模式串自身的特性来避免这种回溯。
部分匹配表 (Next 数组): KMP 算法的核心在于构建一个“部分匹配表”(有时称为 Next 数组),该表记录了模式串中每个前缀的最大相等前后缀的长度,从而可以在不匹配时快速跳过某些比较。
KMP 算法的步骤
构建部分匹配表 (Next 数组):
对于模式串 P,构建一个数组 next,其中 next[i] 表示 P[0…i-1] 的最大相等前后缀的长度。
初始化 next[0] = -1,并设两个指针 j = -1 和 k = 0。
当 k < P.length 时,如果 P[k] == P[j+1],则 next[k+1] = j + 1,并且 j = j + 1;否则,如果 j > -1,则 j = next[j];否则 next[k+1] = 0,并且 k = k + 1。
匹配过程:
设两个指针 i 和 j,分别指向主串 T 和模式串 P 的当前比较位置。
如果 T[i] == P[j],则 i = i + 1 和 j = j + 1。
如果 j == P.length,则找到了一个匹配,此时可以报告匹配的位置或采取其他行动。
如果 T[i] != P[j] 且 j > 0,则 j = next[j];否则 i = i + 1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科协软件2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值