exKMP小结

exKMP算法用于寻找文本串S的每个后缀与模式串T的最大公共长度,具备O(n + m)的时间复杂度。Next数组记录模式串T的后缀与其自身的最长匹配,extend数组记录文本串S的后缀与T的最长匹配。该算法常用于解决字符串匹配问题,如hdu2594等例题。
摘要由CSDN通过智能技术生成

exKMP小结

KMP传送门
用途:现有长度为n的文本串S与长度为m的模式串T,求文本串S的每一个后缀,与模式串T的最大公共长度。
复杂度:空间O(n + m), 时间O(n + m)
用法: 假设字符串起始下标均从1开始,那么Next[i]表示的是模式串T从i开始的后缀与其自身的最长匹配长度,而extend[i]表示的是文本串从i开始的后缀与模式串T的最长匹配长度。在读入文本串S与模式串T并且分别设置好长度n和m之后,直接调用函数exKMP()即可得到extend数组和Next数组。
例题: hdu2594, hdu3336, hdu4300, hdu1238, hdu4763, cf1466G

char T[maxn], S[maxn];
int Next[maxn], extend[maxn], n, m;
//T存放模式串,下标从1开始,m表示模式串长度,Next表示模式串从第i个字符开始形成的后缀与他自身的最长匹配长度
void getNext(char *T, int m, int * Next)
{
   
    int a = 1, p = 1;
    Next[
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值