[数据结构与算法] 字符串匹配 - BF算法
BF(Brute Force)算法
又称暴力匹配算法,是一种朴素的模式匹配算法
给定主串 S : Bilibili 和子串 T :Bilididi
步骤:
1. 主串 S 第一位开始与子串 T 第一位匹配,B 与 l 不匹配, 匹配失败

2. 主串 S 第二位开始与子串 T 第一位匹配, i 与 l 不匹配,匹配失败

3. 主串 S 第三位开始与子串 T 第一位匹配,S 与 T 四个字母全部匹配,匹配成功

总的来说就是,从主串的第一个字母开始与子串匹配,匹配不成功,子串就向后移动一个单位,然后与主串的第二个字母开始匹配,以此类推直到全部匹配成功
当匹配不成的时候,要将 i 进行 回溯, i = i - j + 将 i 回溯到下一个位置

#include <string>
using namespace std; /* 返回子串T在主串S中第pos个字符后的位置,若不存在则返回0 */
/* 确定子串T 在 主串S 第一次出现的位置*/
/* T为非空, 1<= pos <= S.length() */
/* pos: 比较的起始位置*/
int StrCompare_BF(string S, string T, int pos = )
{
int i = pos; //i用于主串S的起始位置
int j = ; //子串的起始位置
int lenS = S.length();
int lenT = T.length();
while (i < lenS&&j < lenT)
{
if (S[i] == T[j])
{
++i;
++j;
}
else
{
//当字符不匹配的时候,i回溯,移动到下一位
i = i - j + ;
j = ;
}
}
if (j >= lenT)
{
return i - j;
}
else
{
return -;
}
}
[数据结构与算法] 字符串匹配 - BF算法的更多相关文章
- 算法——字符串匹配Rabin-Karp算法
前言 Rabin-Karp字符串匹配算法和前面介绍的<朴素字符串匹配算法>类似,也是相应每一个字符进行比較.不同的是Rabin-Karp採用了把字符进行预处理,也就是对每一个字符进行相应进 ...
- 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)
今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...
- 字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?---这应该讲的最容易懂的文章了!
关于字符串匹配算法有很多,之前我有讲过一篇 KMP 匹配算法:图解字符串匹配 KMP 算法,不懂 kmp 的建议看下,写的还不错,这个算法虽然很牛逼,但在实际中用的并不是特别多.至于选择哪一种字符串匹 ...
- 字符串匹配KMP算法详解
1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...
- 通用高效字符串匹配--Sunday算法
字符串匹配(查找)算法是一类重要的字符串算法(String Algorithm).有两个字符串, 长度为m的haystack(查找串)和长度为n的needle(模式串), 它们构造自同一个有限的字母表 ...
- 字符串匹配-BF算法和KMP算法
声明:图片及内容基于https://www.bilibili.com/video/av95949609 BF算法 原理分析 Brute Force 暴力算法 用来在主串中查找模式串是否存以及出现位置 ...
- 数据结构之 字符串---字符串匹配(kmp算法)
串结构练习——字符串匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述 给定两个字符串string1和string2,判断string2是否为strin ...
- 字符串匹配——KMP算法
关于KMP算法的分析,我觉得这两篇博客写的不错: http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html ht ...
- 字符串匹配--Karp-Rabin算法
主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...
随机推荐
- alertmanager
alertmanager主要用于接收prometheus发送的告警信息: wget下载,解压, 配置alertmanager.yml,内容如下: 在prometheus文件下添加rules.yml内容 ...
- Maven更改本地默认仓库时遇到的问题。 No implementation for org.apache.maven.model.path.PathTranslator was bound
按照提示去查看log日志 2019-10-22 16:52:08,646 [ 161168] ERROR - #org.jetbrains.idea.maven - com.google. ...
- 深度工作(Charlotte)
作者:Charlotte文章转自:https://zhuanlan.zhihu.com/p/56719363 为什么要深度工作? 作为一名程序员/媛,工作时长动则十几小时,然而有的人效率奇高,有的人上 ...
- GET POST 区分
get传送的数据量较小,不能大于2KB.post传送的数据量较大,一般被默认为不受限制.但理论上,IIS4中最大量为80KB,IIS5中为100KB. get安全性非常低,get设计成传输数据,一般都 ...
- CF1252J Tiling Terrace
CF1252J Tiling Terrace 洛谷评测传送门 题目描述 Talia has just bought an abandoned house in the outskirt of Jaka ...
- luoguP4248 [AHOI2013]差异
题意 考虑式子前面那段其实是\((n-1)*\frac{n*(n+1)}{2}\),因为每个后缀出现了\(n-1\)次,后缀总长为\(\frac{n*(n+1)}{2}\). 现在考虑后面怎么求: \ ...
- 使用Qiniu-JavaScript-SDK上传文件至七牛云存储
一.Qiniu-JavaScript-SDK介绍 基于 JS-SDK 可以方便的从浏览器端上传文件至七牛云存储,并对上传成功后的图片进行丰富的数据处理操作. JS-SDK 兼容支持 H5 File A ...
- JAVA基础系列:ThreadLocal
1. 思路 什么是ThreadLocal?ThreadLocal类顾名思义可以理解为线程本地变量.也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互 ...
- MongoDB副本集--Secondary节点实例恢复
场景描述 MongoDB副本集中有一台Secondary节点出现RECOVERING的状态 状态如下: arps:RECOVERING> rs.status() { "set" ...
- Django学习笔记(17)——BBS+Blog项目开发(1)验证码功能的实现
本文主要学习验证码功能的实现,为了项目BBS+Blog项目打下基础. 为了防止机器人频繁登陆网站或者破坏分子恶意登陆,很多用户登录和注册系统都提供了图形验证码功能. 验证码(CAPTCHA)是“Com ...