KMP模式匹配算法

KMP算法是一种高效的字符串匹配算法,通过计算next数组来避免重复遍历。它利用字符串的前后缀公共部分来确定匹配失败后的移动步数,提高了匹配效率。next数组的值依赖于字符串的前后缀是否相等,nextval数组是对next的改进,考虑了字符相等的情况。

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

KMP模式匹配算法

KMP算法可以说是一个很经典的模式匹配算法了,刚开始并没有看懂,多看几遍就好了。

朴素模式匹配算法(KMP算法没提出来之前的常用的匹配算法)

当我们在一篇文章中去搜索一个单词的时候,就是在文章中对这个单词进行定位操作。这种子串的定位操作通常称为串的模式匹配。是字符串中最重要的操作之一。模式匹配就是给定两个字符串O和F,长度分别为n和m,判断F是否在O中,如果出现则返回出现的位置。

例如我们要从主串S="csdbcsdn"中,找到T="csdn"这个子串的位置,我们通常需要以下的步骤:

1:主串S第一位开始,S与T的前三个字母都匹配成功,但是S的第四个位置跟T的第四个位置不同,所以第一位匹配失败。

2:主串S第二位开始,S的首字母是s,子串T的首字母是c,匹配失败

3:主串S第三位开始,S的首字母是d,子串T的首字母是c,匹配失败

4:主串S第四位开始,S的首字母是b,子串的首字母是c,匹配失败

5:主串S第五位开始,S与T,4个字母全匹配,匹配成功。

简单的说,就是对主串的每一个字符作为子串的开头,与要匹配的字符串进行匹配。对主串做最大循环,每个字符开头做T的长度的小循环,直到匹配成功或全部遍历完为止。

#朴素模式匹配
#include<stdio.h>
#include<string.h>
int IndexString (char S[10],char T[10],int pos)
{
	int i=pos; /*use to index the location of S */
	int j=0; /*use to index the location of T*/
	int slen; /*the length of String S*/
	int tlen; /* the length of String T*/
	slen=strlen(S);
	tlen=strlen(T);
	while(i<slen && j<tlen)
	{
		if(S[i]=
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值