简单匹配算法和KMP算法

本文介绍了KMP算法的原理和实现,通过对比BF算法来阐述KMP如何解决回溯问题,提高字符串匹配效率。同时,文章还探讨了KMP的进阶内容,包括next数组和nextval数组的应用,提供了详细的代码示例。
摘要由CSDN通过智能技术生成


前言

        简单匹配算法和KMP算法都是对字符串进行匹配,判断一个字符串是否是另一个字符串的子串;

KMP算法也是我们数据结构中比较重要的算法,今天我配合图解对算法进行解析,并配套相应的代码。
另外在我一篇文章中对next数组和nextval数组有了一些解释和说明,将会配套这篇文章的KMP算法进行讲解,如果不了解next数组和nextval数组的朋友可以看一下我的另一篇文章了解一下next数组和nextval数组再来对KMP算法进行分析。


一、BF算法

1.讲解

BF算法本质上就是匹配字符串 ,看下图:
在这里插入图片描述

我们用x和y表示正在匹配的下标数
起始时
x=0;y=0;
看这样两串字符,首先我们比较第一位,不匹配,x+1,y=0,匹配主串的第二位和副串的第一位,匹配,
x+1,y+1,后面一位也匹配 x+1 y+1,到达第三位时也就是下标分别为3和2时不匹配,y=0 x=x-y+1,这样再次重新匹配可以知道规律

//当字符匹配时
x++;
y++;
//字符不匹配时
x = x - y + 1;
y = 0;
//我们用count作为记录连续匹配时的字符个数,如果count的数等于连续匹配相同时的字符的个数时可以得到匹配成功,其余情况则不成功

2.代码实现

代码如下(示例):

#define MAX 100
struct stu {
   
	char ch[MAX];
	int length;
};
int realize(struct stu s, struct stu l)
{
   
	int x = 0;
	int y = 0;
	int count = 0;
	while (x < s.length && y < l.length)
	{
   
		if (s.ch[x] == l.ch[y])
		{
   
			x++;
			y++;
			count++;
		}
		else
		{
   
			count = 0;
			x = x - y + 1;
			y = 0;
		}
	}
	if (count == y)
	{
   
		return 1;
	}
	else
	{
   
		return 0;
	}
}
int main()
{
   
	struct stu s;
	scanf("%s", s.ch);
	/*printf("%s", s.ch);*/
	s.length = strlen(s.ch);
	//test(s.ch);
	struct stu l;
	scanf("%s", l.ch);
	l.length = strlen(l.
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

思瑞思拜

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

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

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

打赏作者

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

抵扣说明:

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

余额充值