字符串匹配:BF算法
(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算法相关推荐
- 【数据结构与算法】字符串匹配 BF算法 RK算法
单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一.BF 算法 1,BF算法是Brute Force的缩写,中文译作暴力匹配算法,也 ...
- 字符串匹配 - RK算法
名称来由 RK 算法的全称叫 Rabin-Karp 算法. 它是由两位发明者 Rabin 和 Karp 的名字来命名的算法. 实现思路 BF算法的实现思路是对主串n中的每一个连续子串n1,都与模式串m ...
- kmp算法详解php,php中字符串匹配KMP算法实现例子
KMP算法是一个比较高级的算法了,加了改进了,下面我们来在php中实现KMP算法,希望例子对各位同学会带来帮助哦. kmp算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J. ...
- 字符串匹配——BMH算法
字符串匹配--BMH算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出BMH算法的思想. 设主串T的长度为n,模式串P的长度 ...
- 字符串匹配——RabinKarp算法
字符串匹配--RabinKarp算法 给定主串T和模式串P,返回P在T中首次出现的位置,如果P不存在于T中,返回-1. 这样的问题就是字符串匹配问题,这里给出RabinKarp算法的思想. 设主串T的 ...
- 【超详细图解】字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?
关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多.至于选择哪一种字符串匹 ...
- 两个字符串匹配度算法
在工作过程中,需要用到两个字符串匹配度算法,网上参考一些资料,写了一个匹配度算法类,项目中用到了而且效果很不错,今天给大家分享. 可以直接复制到你的项目中,就一个调用函数,非常简单. public c ...
- C++实现字符串匹配KMP算法
文章目录 1. 概述 2. 代码实现 3. 代码测试 1. 概述 Kmp算法的介绍及思想参阅下面两篇文章: 字符串匹配KMP算法 算法)通俗易懂的字符串匹配KMP算法及求next值算法 2. 代码实现 ...
- 字符串匹配 KMP算法
问题描述:字符串匹配即查找待匹配字符串(模式串)p在主串s中的位置.一般处理这种问题往往采用简单粗暴的方法--暴力匹配法.所谓暴力匹配法,就是对主串s的每一个字符与要匹配的字符串p的每个字符进行逐一匹 ...
- 字符串匹配——KMP算法
字符串匹配--KMP算法 字符串匹配是计算机编程中最常使用到的基础算法之一.字符串匹配相关的算法很多,Knuth-Morris-Pratt(KMP)算法是最常用的之一.最近在学习KMP算法,学习了 ...
最新文章
- 放弃51单片机,直接学STM32开发会有什么严重的问题?
- pytorch中网络loss传播和参数更新理解
- 新版本Chrome同源策略、跨域问题处理No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.
- VC6命令行编译工程方法
- python异步io 队列_python 学习笔记九 队列,异步IO
- linux 查看空间(内存、磁盘、文件目录、分区)的几个命令
- Swift语言指南(二)--语言基础之注释和分号
- 2007年4月 [Update to 4.27]
- Open3d之KDTree
- FreeRTOS学习-day01
- 16QAM学习(二)multisim仿真 乘法器的实现,MC1496实现信号乘法混合
- 检查Oracle数据库和PDB数据库的大小
- 0063-【测序行业】-国内首个基于NGS技术的癌症多基因检测试剂盒获CFDA准产批件
- Adobe After Effect的 安装 教程
- AtCoder Regular Contest 154 题解
- GLSL着色器实现多重纹理与帧缓冲对象(FBO)
- 【2】Kubernetes集群安装
- linux 内存 内核参数详解,linux系统内核参数说明
- SQL Server出现对象名和列名无效的解决方法
- android更新天气简单方法,简单教你如何编写Android天气预报小程序