串匹配——bf、kmp、bm算法

本文介绍了三种串匹配算法:BF(Brute Force)算法、KMP算法和BM(Boyer-Moore)算法。BF算法采用蛮力法,逐个字符比较;KMP算法通过计算模式串的next[]避免了不必要的回溯;BM算法利用滑动距离函数dist[]提高效率,减少了无效比较。

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

问题描述:给定一个文本,在该文本中查找并定位任意给定字符串:给定两个串S=''s_{1}s_{2}\cdots s_{n}''T=''t_{1}t_{2}\cdots t_{m}'',在主串S中查找子串T的过程,T为模式。

1、bf算法

蛮力法

对主串与模式串一个一个进行比较,若不匹配,则模式串从第一个字符开始,主串往后一个字符,再进行下一趟比较;若匹配,则模式串与主串字符往后进行比较。

直到主串s所剩字符长度小于模式串t长度或模式串所有字符比较完毕。

#include<stdio.h>
#include<string.h>
int BF(char s[],char t[]){
	int n,m,f,i,j;
	n=strlen(s);
	m=strlen(t);
	for(i=0;i<=n-m;i++){
		f=i;
		for(j=0;j<m;j++){
			if(s[f]==t[j])f++;
			else break; 
		}
		if(j==m)return f-m+1;
	}
	return 0;
}
int main(){
	char s[1000],t[100];
	int k;
	printf("BF算法:\n");
	while(1){
	  gets(s);
	  gets(t);
	  k=BF(s,t);	    
	  if(k)printf("在主串中第%d个位置找到子串匹配\n",k);
	  else printf("查找失败\n");		
	}	
	return 0;
}
/*
hjyuytfghd
uyytf
huhgyhyqwwwwqefddfv
qq
ababcabcacbab
abcac
aaaaaaaaaaab
aaaab
abc
abc
*/

2、kmp算法

首先计算模式串的next[],即最大真前缀值(k)加一,定义为:

例如 , 模式 T = aba
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值