字符串匹配之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算法的更多相关文章
- 实现字符串匹配的KMP算法
KMP算法是Knuth-Morris-Pratt算法的简称,它主要用于解决在一个长字符串S中匹配一个较短字符串s. 首先我们从整体来把我这个算法的思想. 字符串匹配的朴素算法: 我们容易想到朴素算法, ...
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- 字符串匹配的 Boyer-Moore 算法
上一篇文章,我介绍了 字符串匹配的KMP算法 但是,它并不是效率最高的算法,实际采用并不多.各种文本编辑器的” 查找” 功能(Ctrl+F),大多采用 Boyer-Moore 算法. 下面,我根据 M ...
- 字符串匹配的 KMP算法
一般字符串匹配过程 KMP算法是字符串匹配算法的一种改进版,一般的字符串匹配算法是:从主串(目标字符串)和模式串(待匹配字符串)的第一个字符开始比较,如果相等则继续匹配下一个字符, 如果不相等则从主串 ...
- 字符串匹配的kmp算法 及 python实现
一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...
- HDU 1711 Number Sequence (字符串匹配,KMP算法)
HDU 1711 Number Sequence (字符串匹配,KMP算法) Description Given two sequences of numbers : a1, a2, ...... , ...
- 字符串匹配(KMP 算法 含代码)
主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...
- 字符串匹配的BF算法和KMP算法学习
引言:关于字符串 字符串(string):是由0或多个字符组成的有限序列.一般写作`s = "123456..."`.s这里是主串,其中的一部分就是子串. 其实,对于字符串大小关系 ...
- 字符串匹配(BF算法和KMP算法及改进KMP算法)
#include <stdio.h> #include <string.h> #include <stdlib.h> #include<cstring> ...
随机推荐
- [Struts]Token 使用及原理
Struts Token 使用 1,先在一个Action中,调用saveToken(HttpServletRequest request)方法.然后转向带有表单的JSP页面. 2,在JSP页面提交 ...
- eclipse中从数据库生成hibernate实体类
为什么写这篇BLOG,是因为经常有同事或网友问起我hiberante实体类的生成问题.所以下次再有人问我可以省一堆的话了,其实这个真的是很简单. 现在hibernate在项目中的应用是越 ...
- k-近邻算法原理入门-机器学习
//2019.08.01下午机器学习算法1——k近邻算法1.k近邻算法是学习机器学习算法最为经典和简单的算法,它是机器学习算法入门最好的算法之一,可以非常好并且快速地理解机器学习的算法的框架与应用.2 ...
- java 根据传入的时间获取当前月的第一天的0点0分0秒和最后一天的23点59分59秒
/** * 获取指定日期所在月份开始的时间 * lkeji * @return */ public static String getMonthBegin(String specifiedDay) { ...
- eclipse console 查看全部的输出
参考:https://blog.csdn.net/thatluck/article/details/52080736
- 2-10 就业课(2.0)-oozie:6、通过oozie执行mr任务,以及执行sqoop任务的解决思路
执行sqoop任务的解决思路(目前的问题是sqoop只安装在node03上,而oozie会随机分配一个节点来执行任务): ======================================= ...
- SpringAOP源码跟踪及学习
Spring 版本 4.3.2 在拿到 Bean 实例以后,会经历一系列的初始化工作,如:工厂回调.init 方法.后处理器在 Bean 初始化前后的处理等,在一般情况下(非 factory-meth ...
- PHPXhprof扩展在windows安装
1.下载在这里 http://dev.freshsite.pl/php-extensions/xhprof.html.(找不到资源可以私我我给你,这个上传不了资源) 注意:一定要找对应的php版本,t ...
- php导出合同模板到excel
/** * [export_excel 合同导出] * [@param itemid:单号] * @return [type] */ public function export_excel() { ...
- C++代写,代写C++,C++程序代写,C++ assignment代写
C++代写,代写C++,C++程序代写 关于C++代写,我们的涉猎范围: C++数据结构.算法题目 C++操作系统os题目 C++网络编程networking题目 C++ Linux题目 C++ Wi ...