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算法的更多相关文章

  1. 算法——字符串匹配Rabin-Karp算法

    前言 Rabin-Karp字符串匹配算法和前面介绍的<朴素字符串匹配算法>类似,也是相应每一个字符进行比較.不同的是Rabin-Karp採用了把字符进行预处理,也就是对每一个字符进行相应进 ...

  2. 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)

    今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...

  3. 字符串匹配Boyer-Moore算法:文本编辑器中的查找功能是如何实现的?---这应该讲的最容易懂的文章了!

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

  4. 字符串匹配KMP算法详解

    1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有比较详细的通俗易懂的讲解,另一方面也怪自己没有沉下心来研究.最近在leetcode上又遇见字符串匹配的题目,以此 ...

  5. 通用高效字符串匹配--Sunday算法

    字符串匹配(查找)算法是一类重要的字符串算法(String Algorithm).有两个字符串, 长度为m的haystack(查找串)和长度为n的needle(模式串), 它们构造自同一个有限的字母表 ...

  6. 字符串匹配-BF算法和KMP算法

    声明:图片及内容基于https://www.bilibili.com/video/av95949609 BF算法 原理分析 Brute Force 暴力算法 用来在主串中查找模式串是否存以及出现位置 ...

  7. 数据结构之 字符串---字符串匹配(kmp算法)

    串结构练习——字符串匹配 Time Limit: 1000MS Memory limit: 65536K 题目描述   给定两个字符串string1和string2,判断string2是否为strin ...

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

    关于KMP算法的分析,我觉得这两篇博客写的不错: http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html ht ...

  9. 字符串匹配--Karp-Rabin算法

    主要特征 1.使用hash函数 2.预处理阶段时间复杂度O(m),常量空间 3.查找阶段时间复杂度O(mn) 4.期望运行时间:O(n+m) 本文地址:http://www.cnblogs.com/a ...

随机推荐

  1. luoguP2486 [SDOI2011]染色

    题目 Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段) ...

  2. javaScript___计算时间前一天和后一天案例

    1.  HTML 排版 <button onclick="anteayer()">前天</button> <button onclick=" ...

  3. H5视频、音频不能自动播放,Uncaught (in promise) DOMException: play() failed because the user didn't

    错误原因:Chrome的autoplay政策在2018年4月做了更改. 解决办法: 第一步,在chrome浏览器中输入:chrome://flags/#autoplay-policy 第二步,在Aut ...

  4. A1039 Course List for Student (25 分)

    一.技术总结 这里由于复杂度的限制,只能够使用vector,然后进行字符串转化:考虑到string.cin.cout会超时,可以使⽤用hash(262626*10+10)将学⽣生姓名变为int型,然后 ...

  5. Educational Codeforces Round 69 (Rated for Div. 2) C. Array Splitting 水题

    C. Array Splitting You are given a sorted array

  6. 修改kile工程名字(转)

    假设原来的工程文件名是first,要改成second1.在工程文件目录中,将first.uvopt和first.uvproj名字改成second.uvopt和second.uvproj.2.其他fir ...

  7. 算法八字符串转换正数(atoi)

    请你来实现一个 atoi 函数,使其能将字符串转换成整数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之 ...

  8. Vue router-link路由不同的写法,不一样的效果

    我想要的路径:http://localhost:8080/#/main/hato/realtime/eventDetail/238 情况一:未进行路由配置:  {      path: 'eventD ...

  9. Java 银联云闪付对接记录

    一开始盲目找资料走了弯路: 还是从银联给的官方文档入手最高效: 附件3:云闪付业务商户入网服务指引.pdf http://tomas.test.upcdn.net/pay/%E9%99%84%E4%B ...

  10. Vue使用小结

    公司新项目使用Asp.Net Core+Vue组合来做,这里总结下对于Vue的认识 为什么选择Vue 主要基于以下几点选择Vue而不是jQuery.React等框架 双向绑定相比于jQuery减少了许 ...