关于KMP学了好几次还没记住这件事

本文介绍了KMP算法的由来和工作原理,强调了其通过next数组优化字符串匹配,减少了不必要的比较次数,降低了时间复杂度。KMP算法的核心在于next数组,它存储了模板串中后缀与前缀相等的情况。文章还提到了暴力算法作为对比,并提供了KMP算法的代码来源。

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

前言:
去年2月份就学了kmp,3月份在学ac自动机的时候就忘了又去复习了下,现在在学数据结构,发现又忘了…我发现很多人都很容易忘掉这个算法,所以来写篇博客记录一下…最后吐槽下发明这个算法的人真是个天才(明明代码那么短,我却看不懂.
View in my own blog

想要记牢KMP,就得知道KMP是怎么来的:(以下来源百度百科)
KMP算法是一种改进的字符串匹配算法,KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n)
简单来说就是暴力算法的改进,减少暴力算法中不必要的匹配;
先来看看暴力算法:

//s为主串(长的字符串)   t为模板串(短的字符串)
int BF(string s,string t)
{
	int i=0,j=0;
	while(i<s.size()&&j<t.size())
	{
		if(s[i]==t[j])i++,j++;
		else i=i-j+1,j=0;
	}
	if(j>t.size())return i-t.size();
	return -1;
}

下面举个例子:(下面s串为主串,t为模板串)

下标 0 1 2 3 4 5 6 7 8 9 10
主串 s h a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值