kmp计算next数组

KMP算法是一种字符串搜索算法,通过构建模式串的next数组进行高效匹配。在预处理阶段,计算出next数组,表示模式串中每个位置的最长相同后缀与前缀的长度。在匹配过程中,若当前字符不匹配,则利用next数组跳跃,避免重复比较。
摘要由CSDN通过智能技术生成

kmp算法:

首先,对模式串(t)进行预处理,p[i]表示以模式串的第i位为结尾的非前缀子串能与模式前缀子串的最大长度,p[0]=0。

然后,对主串(s)进行遍历时当s[i]!=t[j]时,j就直接跳到p[j]进行配对即可。


下面先解决p[i]的问题

可以采用自己跟自己配对的方式

代码如下:

vector<int> p;
i=1;
j=0;
while(i<lent)
{
	while(i<lent&&t[i]==t[j])
	{
		j++;
		p.push_back(j);
		i++;
	}
	while(j>0&&t[i]!=t[j]) 
	{
		j=p[j-1];
	}
	if(t[i]!=t[j])
	{
	    p.push_back(0);
	    i++;
	}   
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值