算法 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码的大小.(其实这样的比较没有多大的意义,我们关心的是字符串是否相等,即匹配等) 字符串的存储结构:同线性表(顺序存储+链式存储) 顺序存储结 ...
随机推荐
- QPixmap 在非QtCreator环境下无法显示jpg图片
这几天需要实现在Qt界面中显示jpg图片,于是直接将路径传给QPixmap对象,发现显示不出来. 然而在Qt SDK自带的Demo中却可以正确显示jpg图片,经搜索引擎查找发现,是自己的exe文件缺少 ...
- python正则表达式写[强口令检测]
关于正则表达式,如果想跟深入学习,建议您看一下<python 核心编程>(第三版)这本书,第一章的内容就是正则表达式. 关于我的学习,我在看<python编程快速上手>这本书第 ...
- python3下GUI界面设计之控件精确定位
#codeing:utf-8import tkinterimport tkinter.messageboxfrom tkinter import filedialogfrom tkinter impo ...
- 什么是RESTful API?
要弄清楚什么是RESTful API,首先要弄清楚什么是REST.REST -- REpresentational State Transfer,英语的直译就是"表现层状态转移". ...
- Mybatis学习 day02
第十六章回顾SQL99中的连接查询 1)内连接 2)外连接 3)自连接 第十七章回顾hibernate多表开发 1)一对一 2)一对多 3)多对多 第十八章 mybatis一对一映射[学生与身份证] ...
- linux随机字符串
pwgen -s 32 1 openssl passwd -salt openssl rand -base64 32 openssl rand -hex 100
- 使用Idea从github上获取项目
转载自:https://www.cnblogs.com/30go/p/7909246.html 整体分三步: 下载和安装git 配置idea 从git获取项目 详细步骤: 1. 下载和安装git 下载 ...
- 取消IDEA默认打开最近的项目(设置打开选择创建页面)
Ctrl + Shift + s 打开设置界面 选择Appearance&Behavior 找到System Settings 将Reopen last project on startup ...
- Delphi Sysem.JSON 链式写法(转全能中间件)
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- 记一次laravel远程关联查询
如图,一个服务(service)对应一个用户(user),一个用户对应多个标签(tag),同时一个tag也可以通过中间表(pivot)对应对个用户. 现在业务需求如下:查service,这些servi ...