BF匹配算法

Brute-Force算法:

从主串S的第一个字符开始模式串T中的第一个字符比较,如果相等,则继续依次比较后续的字符;否则从目标串的第二个字符开始重新模式串T的第一个字符进行比较。(S的指针回溯到当前匹配失败的字符的下一位,T的指针回溯到0)。

BF思想:

给S和T分别设置起始下标i和j;
如果S[i] = T [j] ,则i++,j++,继续比较S和T的下一个字符 ;
如果S[i] != T [j],将 i 和 j 回溯 ,i=i-j+1,j=0,再次进行比较 ;
如果 T 中所有字符均比较完 , 则匹配成功 , 返回本轮匹配的起始下标(i-j) ;
否则 ,匹配失败 ,返回 -1;

最坏时间复杂度为O(m*n)

代码:

//暴力匹配 BF算法 
#include <iostream> 
#include <cstring>
#define SIZE 100
using namespace std;
int BF(char S[],char T[]){
	int i=0,j=0;
	int S_len=strlen(S);
	int T_len=strlen(T);
	while(i<S_len&&j<T_len){
		if(S[i]==T[j]){
			i++;
			j++;
		}
		else{
			i=i-j+1;	//指针回溯 
			j=0;
		}
	}
	if(j==T_len)
		return (i-j);
	else 
		return -1;
}
int main(){
	char S[SIZE];
	char T[SIZE];
	cout<<"请输入主串:";
	cin>>S;
	cout<<"请输入模式串:";
	cin>>T;
	int a=BF(S,T);
	if(a==-1)
		cout<<"匹配失败!" ;
	else
		cout<<"匹配成功!起始下标为"<<a; 
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值