BF算法—实现返回子串首在主串中的位置

本文详细介绍了BF(BruteForce)算法,一种在C语言中用于查找一个字符串是否为另一个字符串子串的暴力方法,通过回溯实现,时间复杂度较高。
摘要由CSDN通过智能技术生成

一:BF算法——Brute Force

1.bf算法是一种暴力算法,它的核心思想是回溯。

2.bf算法可以实现在两个串中,若一个串是另一个串的子串,即可通过此算法找到子串在主串中的第一个元素的位置。

二:实现步骤:

1.创建两个字符数组,主数组大小>=子数组的大小;输入成立的元素集,如:

char M[]="ababcd";

char S=[]="abc";

2.创建 int BF(); 函数,返回类型为 int 即位置;

3.BF接收M,S为参数;创建i,j分别记录M,S的下标;

int BF()函数的实现思路:

4.1创建while()循环,M[i]!='\0' 的时候为判断条件

{

4.2if一下,当 M[i]==S[j]&&S[j]!='\0' 时,即可进行 i++,j++ 操作,使数组往后走;

4.3else一下,即上面条件不满足的时候,可进行将 (i=i-j+1);同时j=0;也就是将子数组回到最开始的地方;主数组右移一位,这里面这里是BF算法的核心。

4.4最后再if一下,当下标 j==strlen(S) 的时候,也就是说到M数组'\0'前时,即 return i-j+1; (因为数组的下标从0开始,所以+1)也就是子串在主串的第一个元素的位置。

}

5.return -1;即它们并没有主次串关系!

三:代码:
 

#include<stdio.h>
#define MAX 20
int BF(char* a, char* b)
{
	int i = 0;
	int j = 0;
	while (a[i] != '\0')
	{
		if (a[i] == b[j] && b[j] != '\0')
		{
			i++;
			j++;
		}
		else
		{
			i = i - j + 1;
			j = 0;
		}
		if (j == strlen(b))
		{
			return i - j + 1;
		}
	}
	return -1;
}
//BF算法 求子串首元素在主串的位置
int main()
{
	//主串
	char a[MAX] = "ababc";
	//子串
	char b[MAX - 1] = "abc";
	int pos = BF(a,b);
	//返回位置
	printf("%d\n", pos);
	return 0;
}

总结:

BF算法很暴力,核心思想是回溯,时间复杂度较高。

学习参考:【C语言】数据结构-----字符串匹配之BF算法_c语言实现字符串的bf算法-CSDN博客

  • 6
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值