[数据结构与算法] 字符串匹配 - 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 ...
随机推荐
- caffe初体验
caffe是一个深度学习的框架, 具体我也不太清楚, 可以自行百度吧, 我也是刚刚知道有这么一个框架, 才疏学浅啊. 在安装完caffe, 我的第一个想法就是, 别管他是个啥东西, 总得先让我运行一些 ...
- 7. Vue - 组件
一.组件分类 1. 定义 组件是可以扩展HTML元素,封装可重用的代码.在较高层面上,组件是自定义元素.特点为:代码重用,提高开发效率,让网页结构更清晰. 2. 局部组件 只能在定义它的el中 ...
- jQuery中的筛选(六)
1. eq(index|-index) 获取当前链式操作中第N个jQuery对象,返回jQuery对象,当参数大于等于0时为正向选取,比如0代表第一个,1代表第二个.当参数为负数时为反向选取,比如-1 ...
- .net core session部分浏览器或移动客户端不可用
.net core session使用有很多文章,这里不再赘述. 问题现象为大部分浏览器或者移动客户端(例如微信.支付宝.钉钉)等都可以正常使用.但部分支付宝用户及钉钉用户确无法使用. 写入后读取不到 ...
- java基本类型包装类之间的值比较问题
废话不多说,先看代码 Integer a = 2;Integer b = 2;if(a==b){ System.out.println("相等");}else{ System.ou ...
- 转载-用excel批量生成insert语句
用excel批量生成insert语句 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/h ...
- CS224N Assignment1 Section 1
运行环境需求 # All Import Statements Defined Here # Note: Do not add to this list. # All the dependencies ...
- mysql-5.7.23-winx64 解压版详细安装教程
1.下载解压版: 2.配置环境变量 (1)新建MYSQL_HOME变量,并配置值为: C:\softwaretool\mysql-5.7.23-winx64 计算机→属性→高级系统设置→高级→环境变量 ...
- 你不得不知的Golang线程模型 [转载]
原著:翟陆续(加多) 资深Java , 著Java并发编程之美 一.前言 本节我们来探讨Go的线程模型,首先我们先来回顾下常见的三种线程模型,然后在介绍Go中独特的线程模型. 二.三种线程模型 线程的 ...
- Kubernetes Pod 资源限制
Kubernetes Pod 资源限制 官方文档:https://kubernetes.io/docs/concepts/configuration/manage-compute-resources- ...