数据结构bf算法步骤完整代码C语言,数据结构:BF算法

贴上源代码:

#include

using namespace std;

int BF(char S[],char T[])

{

int i,j;

i = j = 0;

while(S[i]!='\0'&&T[j]!='\0'){

if(S[i]==T[i]){

i++;

j++;

}

else{

j = 0;

i = i-j+1;

}

}

if(T[j]=='\0')

return i -j+1;

else

return 0;

}

int main()

{

//BF

cout<

return 0;

}

这是一种低效的模式匹配算法。叫做BF算法。

主要思想十分简单:

给出两个字符串,分别为主串S和子串T,记下标为i,j。分别从第一个字符开始比较(即i=j=0)。当S[i]==T[j]时,继续比较下一个;当S[i]!=T[j]时,j=0(重新从头开始比较子串),i的值赋为i-j+1。(关于为什么,我们接下来说)。如果S[i]=='\0'了,证明主串比较完毕了,但是没有找到匹配的,即S不含有T,那么返回0;如果T[j]=='\0'了,证明子串比较完毕了,也就是主串S中含有子串T。此时返回子串T在主串S中出现的第一个字符的位置,即返回i-j+1

图示如下:

画图的时候两个串的最后都有‘\0’!!!!因为字符串的最后一位不是‘\0’么 但是我一个不小心忘了画了 也懒得改图了。。你们知道就行。。。。

bf6a2d3c53cd29ae8aeefc4b40362a44.png

11294db36006ec633f4c2b39256b5e49.png

0823bee29600d5af1f2055b584f7b2d3.png

1bec12850780c783fe4943cb95a3a461.png

f29f4f91dc132cbddd75b44282b25aca.png

此时S[i]!=T[j]

进行“回溯”。

子串从头开始比较,主串往后挪一位开始比较。

8dc5e4e8bb0329115fa2063c96cdfc7e.png

此时还是S[i]!=T[j]

进行“回溯”。

子串从头开始比较,主串往后挪一位开始比较

0ae3740d0cb54cfbc98a4ade2880f0ad.png

以此类推。。。。

即,

if(S[i]==T[i]){

i++;

j++;

}

else{

j = 0;

i = i-j+1;

}

其中,i-j+1算的是i开头在的位置和j开头在的位置的差(即使i和j代表的字符相等时,同时++,也不会改变这个差)。再加上1就是再往后移一位。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值