(1)算法原理

BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。

BF算法是一种蛮力算法。

举例说明:

S:  ababcababa

P:  ababa

BF算法匹配的步骤如下:

i=0, j=0

i=1, j=1

i=2,j=2

i=3, j=3

i=4, j=4(失败)

ababcababa

ababcababa

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

ababa

ababa

i=1,j=0(失败)

ababcababa

ababa

i=2,j=0

i=3,j=1

i=4,j=2(失败)

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

i=3,j=0(失败)

ababcababa

ababa

i=4,j=0(失败)

ababcababa

ababa

i=5,j=0

i=6,j=1

i=7,j=2

i=8,j=3

i=9,j=4(成功)

ababcababa

ababcababa

ababcababa

ababcababa

ababcababa

ababa

ababa

ababa

ababa

ababa

(2)代码实现

#include <stdio.h>

#include <string.h>

int BFMatch(char *s,char *p)

{

int i,j;

i =0;

while(i < strlen(s))

{

j = 0;

while(s[i] == p[j] &&j<strlen(p))

{

i++;

j++;

}

if(strlen(p) == j)

{

return i - strlen(p);

}

i = i - j + 1;                // 指针i回溯

}

return -1;

}

int main()

{

char *szSource = "ababcababa";

char *szSub = "ababa";

int index =BFMatch(szSource, szSub);

printf("目标串包含匹配串的起始位置:%d",index);

}

(3)运算过程

(a) i=0, j=0, s[0]==p[0];

i=1,j=1, s[1]==p[1];

i=2,j=2, s[2]==p[2];

i=3,j=3, s[3]==p[3];

i=4,j=4, s[[4]!=p[4], 第一次循环结束,i=4-4+1=1

(b) i=1, j=0, s[1]!=p[0],第二次循环结束, i=1-0+1=2

(c) i=2, j=0, s[2]==p[0];

i=3, j=1, s[3]==p[1];

i=4, j=2, s[4]!=p[2]; 第三次循环结束,i=4-2+1=3

(d) i=3, j=0, s[3]!=p[0];第四次循环结束,i=3-0+1=4

(e) i=4, j=0, s[4]!=p[0];第四次循环结束,i=4-0+1=5

(f) i=5, j=0, s[5]==p[0];

i=6, j=1; s[6]==p[1];

i=7, j=2, s[7]==p[2];

i=8, j=3, s[8]==p[3];

i=9, j=4, s[9]==p[4];

i=10, j=5, j==strlen(p), 最后一次循环结束,返回i-strlen(p) = 5

(4)运行结果

目标串包含匹配串的起始位置:5

字符串匹配:BF算法相关推荐

  1. 【数据结构与算法】字符串匹配 BF算法 RK算法

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...

  2. 字符串匹配 - RK算法

    名称来由 RK 算法的全称叫 Rabin-Karp 算法. 它是由两位发明者 Rabin 和 Karp 的名字来命名的算法. 实现思路 BF算法的实现思路是对主串n中的每一个连续子串n1,都与模式串m ...

  3. kmp算法详解php,php中字符串匹配KMP算法实现例子

    KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦. kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J. ...

  4. 字符串匹配——BMH算法

    字符串匹配--BMH算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出BMH算法的思想. 设主串T的长度为n,模式串P的长度 ...

  5. 字符串匹配——RabinKarp算法

    字符串匹配--RabinKarp算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出RabinKarp算法的思想. 设主串T的 ...

  6. 【超详细图解】字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?

    关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多.至于选择哪一种字符串匹 ...

  7. 两个字符串匹配度算法

    在工作过程中,需要用到两个字符串匹配度算法,网上参考一些资料,写了一个匹配度算法类,项目中用到了而且效果很不错,今天给大家分享. 可以直接复制到你的项目中,就一个调用函数,非常简单. public c ...

  8. C++实现字符串匹配KMP算法

    文章目录 1. 概述 2. 代码实现 3. 代码测试 1. 概述 Kmp算法的介绍及思想参阅下面两篇文章: 字符串匹配KMP算法 算法)通俗易懂的字符串匹配KMP算法及求next值算法 2. 代码实现 ...

  9. 字符串匹配 KMP算法

    问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置.一般处理这种问题往往采用简单粗暴的方法--暴力匹配法.所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹 ...

  10. 字符串匹配——KMP算法

    字符串匹配--KMP算法 ​ 字符串匹配是计算机编程中最常使用到的基础算法之一.字符串匹配相关的算法很多,Knuth-Morris-Pratt(KMP)算法是最常用的之一.最近在学习KMP算法,学习了 ...

最新文章

  1. 放弃51单片机,直接学STM32开发会有什么严重的问题?
  2. pytorch中网络loss传播和参数更新理解
  3. 新版本Chrome同源策略、跨域问题处理No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
  4. VC6命令行编译工程方法
  5. python异步io 队列_python 学习笔记九 队列,异步IO
  6. linux 查看空间(内存、磁盘、文件目录、分区)的几个命令
  7. Swift语言指南(二)--语言基础之注释和分号
  8. 2007年4月 [Update to 4.27]
  9. Open3d之KDTree
  10. FreeRTOS学习-day01
  11. 16QAM学习(二)multisim仿真 乘法器的实现,MC1496实现信号乘法混合
  12. 检查Oracle数据库和PDB数据库的大小
  13. 0063-【测序行业】-国内首个基于NGS技术的癌症多基因检测试剂盒获CFDA准产批件
  14. Adobe After Effect的 安装 教程
  15. AtCoder Regular Contest 154 题解
  16. GLSL着色器实现多重纹理与帧缓冲对象(FBO)
  17. 【2】Kubernetes集群安装
  18. linux 内存 内核参数详解,linux系统内核参数说明
  19. SQL Server出现对象名和列名无效的解决方法
  20. android更新天气简单方法,简单教你如何编写Android天气预报小程序

热门文章

  1. android beam苹果,安卓版隔空投送:功能远超苹果!
  2. WIFI Aware 介绍
  3. IOS 隐藏 app 桌面 图标
  4. Jmeter使用之——对参数进行加密
  5. 2016.3 Vivado - 出现bram功耗报错
  6. Android Studio多渠道打包和代码混淆教程
  7. rdm 下载地址 redis管理工具
  8. 高通吸取教训,骁龙8G2控制发热,与国产手机一起打翻身仗
  9. 工作流管理系统开发之一 工作流概念
  10. 5G的高精度时间同步服务器网络实现方案