算法 BF算法
BF算法是字符匹配的一种算法,也称暴力匹配算法
算法思想:
从主串s1的pos位置出发,与子串s2第一位进行匹配
若相等,接着匹配后一位字符
若不相等,则返回到s1前一次匹配位置的后一位,接着与s2的起始位进行匹配
直到与s2全部匹配成功,则返回在s1中开始完全匹配的下标
简单说这个算法的思想就是匹配失败,就重新从上一次匹配位置的下一位开始匹配
难理解之处:
①i = i - j + 2,这一步是若匹配失败,从上一次匹配位置的下一位开始
i - j是去掉前面匹配过的次数,+ 2是到达下一个匹配位置
②i - s2.length(),它返回的是第一次匹配成功时在s1中的下标
也就是去掉与s2匹配的个数,就是下标
代码:
#include <iostream>
#include <string>
using namespace std;
//BF算法(暴力匹配算法)
int BF(string s1, string s2, int pos)
{
int i = pos - 1;
int j = 0;
while(i < s1.length() && j < s2.length()) //若i和j都大于字符串的长度就结束循环
{
if(s1[i] == s2[j])
{
i++;
j++;
}
else
{
i = i - j + 2;
j = 1;
}
}
if(j >= s2.length())
return i - s2.length(); //返回的是第一次匹配到的字符的下标
return 0;
}
int main()
{
string s1 = "abcdabcdefg";
string s2 = "abcde";
int pos;
cin >> pos; //输入s1开始匹配的位置
cout << BF(s1, s2, pos);
return 0;
}
运行程序:
算法 BF算法的更多相关文章
- 经典算法—BF算法(字符串匹配)
前言 字符串的匹配算法也是很经典的一个算法,在面试的时候常常会遇到,而BF算法是字符串模式匹配中的一个简单的算法 1,什么是BF算法 BF算法,即暴力(Brute Force)算法,是普通的模式匹配算 ...
- 如何在文本编辑器中实现搜索功能? 字符串比较算法 BF算法 RK算法
1.暴力比较 BF算法 2.比较字串hash值 RK算法 //字符串匹配 public class StringCmp { //约定:A主串长 n ,B模式串 长m.要求:在A串中找到B串匹配的下标 ...
- BF算法与KMP算法
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符:若不相等,则比较S的 ...
- BF算法
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的第二个字符和P的第一个字符, ...
- BF算法(模式匹配)
BF算法 (Brute-Force算法) 一种简单的模式匹配算法,目的是寻找模式串p是否在目标串s中有出现. 思想:先从第一个字符开始匹配,如果p[j]==s[i],那么继续向下比较,一旦不相等,即回 ...
- 串、串的模式匹配算法(子串查找)BF算法、KMP算法
串的定长顺序存储#define MAXSTRLEN 255,//超出这个长度则超出部分被舍去,称为截断 串的模式匹配: 串的定义:0个或多个字符组成的有限序列S = 'a1a2a3…….an ' n ...
- 数据结构(三)串---BF算法(朴素模式匹配)
(一)BF算法了解 BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法.BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T ...
- Java实现内存分配算法 FF(首次适应算法) BF(最佳适应算法)
一.概述 因为这次os作业对用户在控制台的输入输出有要求,所以我花了挺多的代码来完善控制台的显示. MemoryAlgorithm类里只是和控制台输入输出有关的操作,而对内存的所有逻辑操作都是用Mem ...
- BF算法 + KMP算法
准备: 字符串比大小:比的就是字符串里每个字符的ASCII码的大小.(其实这样的比较没有多大的意义,我们关心的是字符串是否相等,即匹配等) 字符串的存储结构:同线性表(顺序存储+链式存储) 顺序存储结 ...
随机推荐
- python数据类型、if判断语句
python的数据类型: int(整型) float(浮点型) #相较c++,去除了char.long.longlong... str(字符串) #同等c++ sting类型 list(列表) ...
- C# Global定时执行Global文件aTimer处理
public class Global : System.Web.HttpApplication { private static event Action eventActions; /// < ...
- JDK中所包含的设计模式
本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助. 一.设计模式是什么(1)反复出现问题的解决方案( ...
- 【HQL】函数汇总
背景 抽空整理一篇HQL函数及常用的小技巧 COALESCE COALESCE(T v1, T v2, -) 返回参数中的第一个非空值:如果所有值都为NULL,那么返回NULL
- 质心坐标(barycentric coordinates)及其应用
一.什么是质心坐标? 在几何结构中,质心坐标是指图形中的点相对各顶点的位置. 以图1的线段 AB 为例,点 P 位于线段 AB 之间, 图1 线段AB和点P 此时计算点 P 的公式为 . 同理,在三角 ...
- ArcGIS API for JS 测量线长(各折线段)
这里测量长度主要分为两个方面,一个是在绘制长折线段时,不仅需要显示总线段的长度,还要在各线段的中间显示各折线段的长度:另一个则是在绘制多边形时,不仅需要显示多边形的面积,还需要在各边的中间显示线段长. ...
- 实现ls-l功能
实现代码 #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <diren ...
- springboot中logback配置
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="false ...
- centos7.4下的KVM虚拟机安装使用
本来是用的vmware,不过后来想试下KVM,想着装个ZSTACK也行,结果zstack使用网络安装没搞明白,把物理机系统毁了,这下彻底完蛋了,只好还装个centos了,但是又不想用VMWARE就想起 ...
- OpenWRT平台搭建及简单应用[转帖]+华为HG255D编译实践(20190323更新)
转自:http://www.cnblogs.com/zmkeil/archive/2013/04/17/3027385.html对于HG255D参照这里:http://www.right.com.cn ...