字符串的模式匹配:BF算法

字符串的匹配模式:朴素的模式匹配算法(BF算法) 基本思想:从主串s寻找子串t,从s和t的第一个字符开始匹配,若匹配,则继续第二个匹配,若到后面(匹配到第m位,未匹配完),则子串t回溯到第一个字符,主串回溯到第二个字符,继续子串的第一个和主串的第二个匹配。。。。 伪代码: 在串s和串t中设置比较的起始下标i和j; 重复下述操作,直到s或t的所有字符均比较完毕;2.1 如果s[i]等于t[j],继续比较s和t的下一对字符 2.1否则将下标i和j回 阅读详情

串的模式匹配之BF算法

众所周知,暴力算法能够解决很多问题,因为暴力算法枚举出了每一种情况然后去讨论是否成立,这导致了暴力算法虽然很有效但是有时人们不想使用它,因为它要将每一种情况都讨论了,这在情况很多的情况下几乎不具有可行性,但是暴力算法是很有效的。
BF算法就是一种暴力算法,在串的模式匹配中BF算法就从第一种可能的情况开始进行枚举验证直到匹配成功或者已经检验完所有可能的情况也没有匹配成功(匹配失败)。
BF算法很符合我们的直觉,想象一下,有这样两个串S="C1C2...Cn"S="C_1C_2...C_n"S="C1​C2​...Cn​"T="D1D2...Dm"T="D_1D_2...D_m"T="D1​D2​...Dm​"
其中T串的长度小于等于S串(否则的话T串不可能是S的子串),如果T串是S串的一个子串,那么在S串中一定存在这样一个串S子="SxSx+1...Sx+m−1"S_子="S_xS_{x+1}...S_{x+m-1}"S子​="Sx​Sx+1​...Sx+m−1​"使得
S子=TS_子=TS子​=T

上面这两段话表示如果T串是S串的一个子串的话,一定能从S串的某个位
置x开始找到连续的n个字符,这连续的n个字符组成的串与T串相等

画出图示则是这样的
请添加图片描述

如果T串是S串的一个子串,那么说明,一定可以在串S中找到一段子序列使得子序列与串T相等。
请添加图片描述

也就是说,我们要让串T与串S进行模式匹配,其实就是找一段S串中的子序列,这个子序列中的字符与串T对应相等,但是我们并不知道这一个子序列从哪里开始,甚至我们都不知道是否存在这样一个子序列。那么怎么查看是否存在这样一个子序列呢?我们知道如果存在这样一个子序列使得S子=TS_子=TS子​=T
那么存在S子[i]=T[i]  (i=0,1,2...m)S_子[i]=T[i] \ \ (i = 0, 1,2...m) S子​[i]=T[i]  (i=0,1,2...m)
那么我们就先寻找T[0]在S中的什么位置,按照图示就可画成这样:
请添加图片描述

请添加图片描述

请添加图片描述

如此寻找下去如果找到了这样一个字符,我们就可以接着进行验证剩余的对应字符。
请添加图片描述
请添加图片描述
请添加图片描述

当所有的字符都匹配上了,我们就说在T串是S串的一个子串,其中有一个环节没有匹配上,那么就说明要么首字符没有匹配上要么中间字符没有匹配上,那么我们就说T串不是S串的一个子串。
这就是串的模式匹配的BF算法,很容易想明白。
串。
好的小伙伴们,今天的分享到此为止,期待下一次的与大家分享,
请添加图片描述

字符串模式匹配的BF算法与KMP算法 设有主串s和子串t,子串t定位是指在主串s中找到一个与子串t相等的子串。通常把主串s称为目标串,把子串t称为模式串,因此定位也称作模式匹配。模式匹配成功是指在目标串s中找到一个模式串t。         传统的字符串模式匹配算法(也就是BF算法)就是对于主串和模式串双双自左向右,一个一个字符比较,如果不匹配,主串和模式串的位置指针都要回溯。这样的算法时间复杂度为O(n*m),其中n和m分别为串s 阅读详情

相关推荐

【数据结构】 字符串模式匹配

模式匹配目前有两种方法: BF算法和KMP算法 BF算法 思路: 从目标串的第一个字符和模式串的第一个字符开始,依次比较每个字符,如果相同指针同步后移比较后续字符,如果不同i指针后移一个,j指针回到第一个字符重新匹配,若匹配成功就返回模式串t中第一个字符在目标串中的位置,失败返回0 代码: int index(Sqstring s,Sqstring t){ int i=j=1; //下标从1开始 while(i<=s.length&&j<=t...

小k要加油的博客 1757

字符串---BF算法(串模式匹配算法)

@Adrian 串的模式匹配算法,通俗地理解,是一种用来判断两个串之间是否具有"主串与子串"关系的算法。 实现串的模式匹配的算法主要有以下两种: 1. 普通的模式匹配算法; 2. 快速模式匹配算法; BF算法原理: 普通模式匹配算法,其实现过程没有任何技巧,就是简单粗暴地拿一个串同另一个串中的字符一一比对,得到最终结果。 例如,使用普通模式匹配算法判断串 A(“abcac”)是否为串 B(“aba...

qq_43228581的博客 1696

FPGA时钟设计陷阱:为什么你的MRCC引脚总触发Place 30-675错误?

本文深入解析FPGA开发中常见的Place 30-675错误,揭示MRCC引脚与时钟资源分配的关键问题。通过对比MRCC与普通IO引脚特性,分析错误根源,并提供时钟约束优化、IP核重配置和手动布局三套解决方案,帮助工程师规避时钟设计陷阱,提升FPGA系统稳定性。

potato的博客 693

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

本章我们一起学习字符串匹配算法–BF算法和KMP算法的实现,希望对大家解决字符串匹配问题有些许帮助!!!🎠🎠🎠。

m0_74288306的博客 1701

测试人必看!正交表与Allpairs工具对比:如何选择最适合你的组合测试方案?

本文深入对比了正交表、PICT与Allpairs三种主流组合测试方案,帮助测试人员根据项目场景做出最佳选择。文章分析了各自的核心原理、优劣势及适用场景,特别强调了在涉及复杂约束时PICT工具的强大功能,并提供了从原理学习到CI/CD集成的实战选型指南。

weixin_29224309的博客 267

【GAMES101】现代计算机图形学入门 资料整理

课程网址 课程主页 包括ppt 课程PPT和视频 一篇搞定!GAMES101现代计算机图形学入门(全) 作业链接地址 作业论坛 GAMES101课程环境搭建(Win10+VSCode) 计算机图形学笔记 虎书pdf 提取:n2rx 【必须】:高等数学(微积分、线性代数)、算法、数据结构 【非必须】:信号处理、数值分析、大学物理(光学) 在线公式编辑器 一定要做作业,如果个人要配置环境的话应该是配置opencv,eigen这两个核心库就行了,目前觉得最核心的一个作业是作业3,实现着色器和渲染管线,做完一遍

ysh的博客 2683

【Java】BF算法(串模式匹配算法)

BF算法,即,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个与模式串T的第一个字符串进行匹配,若相等,则继续比较S的第二个字符和T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果,。

weixin_65476629的博客 1135

MPU6050 加速度计和陀螺仪传感器与 Arduino 的接口

虽然该模型并不能准确代表现实世界中加速度计传感器的构建方式,但它通常有助于理解为什么加速度计的输出信号通常以 ±g 为单位指定,或者为什么加速度计在静止时在 z 轴上的读数为 1g,或者在不同方向上您可以期望得到什么样的加速度计读数。该模块的核心是低功耗、低成本的 6 轴运动跟踪芯片 MPU6050,它将 3 轴陀螺仪、3 轴加速度计和数字运动处理器 (DMP) 集成到一个 4mm x 4mm 的微型芯片中。小时候,科学博览会上的陀螺仪总是让我们感到惊讶,因为它们以奇怪的方式移动,甚至似乎违背了重力。

sxstj的博客 9932

字符串匹配: BF与KMP算法

详细介绍字符串匹配相关的算法, BF是暴力匹配的算法, 而KMP算法中最重要的是要理解next数组原理和作用, 掌握如何求解next数组.

trong_ 的烂笔头 2802

DrissionPage无头模式破盾记:实战绕过CloudFlare 5秒验证

本文详细介绍了如何使用DrissionPage无头模式绕过CloudFlare 5秒盾验证,提升爬虫效率。通过关键参数配置、服务器环境问题处理及高级绕过技巧,如动态UA轮换和鼠标移动模拟,帮助开发者有效应对反爬机制。实战案例展示了如何结合最新Chrome UA和参数设置实现稳定数据采集。

weixin_29327525的博客 487

【React Native】源码分析之Native UI的封装和管理

转载请注明出处:http://blog.youkuaiyun.com/u013531824/article/details/54020287,谢谢。  ReactNative作为使用React开发Native应用的新框架,随着时间的增加,无论是社区还是个人对她的兴趣与日递增。此文目的是希望和大家一起欣赏一下ReactNative的部分源码。阅读源码好处多多,让攻城狮更溜的开发ReactNative应用的同时,也

Tiny的专栏 9777

字符串匹配算法之BF算法(即暴力算法)

1、BF算法 BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。 2、C语言实现 #include<stdio.h> #include<assert.h> #include<string.h> /* str主串 sub

晨的博客 3817

DeepSeek 赋能招投标全流程智能化:多模态解析、知识图谱与投标文件自动生成实战指南(附完整代码与行业案例)

摘要:本文深入探讨DeepSeek技术在招投标领域的全流程智能化应用,通过整合自然语言处理(NLP)、多模态解析、知识图谱等核心技术,实现招标文件智能解析与投标文件自动生成。文中详细解析DeepSeek-R1模型的多模态处理机制、动态知识图谱构建方法及智能模板填充算法,通过完整代码实现展示技术细节。结合广某资源交易平台、山西XX"XX云"等典型案例,验证技术方案在提升招投标效率、降低人为错误方面的显著效果。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1462

字符串得模式匹配算法:BF,KMP,BM以及Sunday算法

字符串得模式匹配操作:BF,KMP,BM以及Sunday算法 文章目录字符串得模式匹配操作:BF,KMP,BM以及Sunday算法介绍模式匹配BF算法KMP算法BM算法SunDay算法 介绍 模式匹配 模式串(字符串),要在另一个主串中查找是否存在与模式串相等的子串(主串中任意连续字符组成的子序列) BF算法 最简单最暴力 KMP算法 值得深入研究得算法。其中next数组的求值是理解kmp算法的关键。 public class KMP { /** * * @param

ITxiaofeixiang的博客 593

在Open3D中从网格中采样点云

在本文中,我们将学习如何使用Open3D从网格中采样点云。点云采样是点云处理的重要步骤之一,能够为后续的任务提供必要的输入。通过这些示例代码,我们可以很容易地使用Open3D库从网格模型中采样点云。值得注意的是,根据实际应用需求,我们可以调整采样点的数量和采样方法来满足不同的场景需求。除了使用Poisson Disk算法,Open3D还提供了其他的点云采样方法,如Uniform采样和Random采样。这个函数使用了Poisson Disk采样算法,可以在保持点云均匀性的同时,尽可能避免重叠点的生成。

FxRuby的博客 412

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

字符串的模式匹配: BF算法

暴风(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。   BF算法是一种蛮力算法。蛮力搜索,比较简单的一种字符串匹配算法,在处理简单的数据时候就可以用这种算法,完全匹配,就是速度慢啊。基

xlxxcc的专栏 8247

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

字符串模式匹配:BF算法和RK算法

BF算法(暴力匹配算法,也叫朴素匹配算法).性能不是很高。        我们在主串中,检查起始位置分别是0.1.2…n-m且长度为n-m+1个子串,看有没有跟模式串匹配的。(在A中查找B,A就是主串,B就是模式串,且A>B)。最坏的时间复杂度为O(n*m),     &nbs...

qq_34787356的博客 310

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

算法笔记:简单的字符串模式匹配-BF算法

字符串模式匹配是匹配字符串A中是否存在子串a,一般字符串的结尾为'\0',可以以此作为字符串结束的判定标准。其过程原理图如下所示:给出源代码:#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #define LENGTH 10 typedef unsigned char String[LENGTH ...

RToax 993

大话数据结构十:字符串的模式匹配(BF算法)

1. BF算法简介: BF(Brute Force)算法是普通的模式匹配算法,又称为朴素匹配算法或蛮力算法,该算法最大缺点就是字符匹配失败指针就要回溯,所以性能很低。 2. BF算法思想: BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次

技术人生 2814

字符串的模式匹配:bf暴力和kmp算法

模式匹配的本质是比较。bf是一种暴力算法,通过双指针 对应比较匹配实现。主串和模式串都需要回溯。kmp通过改进,主串不需要回溯。模式串通过一定规则回退。

2401_87338545的博客 227

查表:字符串模式匹配(BF、KMP算法)

字符串模式匹配(BF、KMP算法) KMP算法(看毛片算法),是由Knuth,Morris,Pratt共同提出的模式匹配算法,其对于任何模式和目标序列,都可以在线性时间内完成匹配查找,而不会发生退化,是一个非常优秀的模式匹配算法(反正这个看毛片算法就是一个很高效很屌的匹配算法)。但是相较于其他模式匹配算法,该算法晦涩难懂(比较坑爹),第一次接触该算法的人往往会一脸懵逼,主要原因是KMP算法在构造

黑夜之星的博客 775

字符串:2.BF算法(普通模式匹配算法)

判断两个串之间是否存在主串与子串的关系,这个过程称为串的模式匹配。 在串的模式匹配过程,子串 T 通常被叫做“模式串”。 普通的模式匹配(“BF”算法) 判断两个串是否存在子串与主串的关系,最直接的算法就是拿着模式串,去和主串从头到尾一一比对,这就是“BF”算法的实现思想。 将提供的模式串(例如 “abcac” )从主串的第一个字符开始,依次判断相同位置的字符是否相等,如果全部相等,则匹配成...

tr_ainiyangyang的博客 380

算法笔记:简单的字符串模式匹配-KMP算法(与BF算法对比时间复杂度)

简单的讲就是字符串不回溯。#include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; int countBF = 0; int countKMP = 0; int BF(char *A, char *a) { printf("\n-------BF-------\n"); int j = 0, i = ...

RToax 3596

字符串模式匹配

字符串模式匹配 1.BF算法 初始时让目标T的第 0 位与模式P的第 0 位对齐; 顺序比对目标T与模式P中的对应字符: 若 P 与 T 比对发现对应位不匹配,则本趟失配。将 P 右移一位与 T 对齐,进行下一趟比对; 若 P 与 T 对应位都相等,则匹配成功,返回 T当前比较指针停留位置减去 P 的长度,即目标T 中匹配成功的位置,算法结束。 若 P 与 T 比对过程中,T 后面所剩字符个数少于 P 的长度,则模式匹配失败。 时间复杂度为O(m*n) int Find(Hstring &T,Hs

onlynb的博客 1209
上一篇: leetcode刷题日记:9. Palindrome Number
下一篇: leetcode刷题日记:13.Roman To Interger
apprentice_eye
博客等级 码龄6年 1165粉丝 348原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值