【数据结构】字符串匹配(BF KMP)算法

本文介绍了字符串匹配的BF(Brute Force)算法和KMP算法。BF算法通过主串和子串逐一比较寻找子串起始位置,但效率低下,存在无效回退。KMP算法核心是避免无效回退,通过next数组记录子串的合适回退位置,提高匹配效率。
摘要由CSDN通过智能技术生成

在开始前需要了解子串和真子串的区别

abc  的  子串有 a  ,b,c,ab,bc,ac,abc  ,  而真子串是不包括自身的其他子串

BF算法  

目的 : 在主串中 ,找到子串开始的位置 

如  主串  aaaabaa   子串 ab      就应该返回下标3

BF算法的思想是 :1让主串和子串一一比较 ,主串下标记作i  子串下标记作j   让i++  j++

2  如果j 走出了范围就说明 找到了子串 ,  返回 i -j (因为要返回起始位置 ,主串走过的长度就是i)

3  如果 i  和 j 不相等,就让 j =0  , i 回退到这一趟 开始下标的下一个位置 (i-j+1),如果这里的 i 不回退的话,有可能跳过子串  。

如 主串是 aaabaaaa  子串是 aab  , 应该返回的是 1 下标 ,但 如果没有回退 i 的话 , 开始比较 到 2 号下标不相等  i 又从 2下标开始比较 ,跳过了字串 。所以需要回退i 。

以上就是 BF算法的主要思想 , 下来实现一下 代码 。

int BF_Search(const char *str, const char *sub, int pos)//pos代表主串开始查找的下标位置
{
	assert(str!=NULL && sub!=NULL);
	if(pos<0 || pos>=(int)strlen(str))
	{
		//retu
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值