BF算法(Brute Force)

算法思想:运用模式串和目标串进行逐个比较,当模式串匹配失败,则回溯到目标串的下一位,两个循环直到匹配成功或者跳出循环查找失败。

#include <iostream>
#include<cstring>
using namespace std;
#define MAXSIZE 250
typedef char STR[MAXSIZE + 1];

int assign(STR T, char *c)//T[0]用于存储位数,使串字符从数组第一位开始计起
{
if (strlen(c) > MAXSIZE) return 0;
else
{
T[0] = strlen(c);
for (int i = 1; i <= T[0]; ++i)
T[i] = *(c + i - 1);
return 1;
}
}

int BF(STR S, STR T,int pos)
{
int i = pos; int j = 1;
while (i <= S[0] && j <= T[0])
{
if (S[i] == T[j])
{
++i;
++j;
}//相同则继续匹配下一位
else
{
i = i - j + 2;
j = 1;
}//不相同则回溯
}
if (j > T[0]) return  i - T[0];//返回匹配位置
else return 0;

return 0;
}

int main()
{
STR S,T;
assign(S, "bbdcvaaabbaba" );
assign(T, "abba");
int flag;
flag=BF(S,T,1) ;
if(flag)
 cout << "匹配成功,在目标串的第" <<flag << "位数开始首次匹配!"<<endl;
else cout << "匹配失败,目标串中不存在该模式串!" << endl;
return 0;
}

时间复杂度为O(m*n),在一些数据量交少的地方可以用,但是一旦数据量达到一定量级,基本吃不动,这个时候就要去学习一下KMP算法了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值