串的定义及BF算法

定义

BF算法——朴素查找算法——也叫做串的模式匹配算法

其应用特别多,比如经常在一篇文章里面搜索一些东西,(比如文章里的某个内容,或某些关键字词出现的位置,次数等)

之前我们大多数情况下是用来搜索关键字,而Search函数只是用来搜索一个字符,比如下面push关键字的开头p,但search搜索不了整个关键字push

这种搜索整个关键字也就是搜索一串字符,就叫做——串的模式匹配

主串:相当于一篇文章

子串:就相当于这篇文章中的某个关键字

串的模式匹配算法:相当于在主串中查找看子串存不存在

搜索查找就是挨个字符对比匹配的过程

主串的下标i,和子串的下标j,然后将i位置的字符和j位置的字符进行对比,2个都一样就一块往后走,比下一个

遇到不一样的了

不一样了就要退回去重新了,j回去

现在2个一样,然后i和j同时往后走

按照这种方式一种走,直到j走完了,j走到空了,就认为匹配成功了

但上面这种算法是不对的,因为i也必须要退回去,即i必须回退

因为这种算法就不符合下图这种

每次不匹配时,i回退到上次开始的位置的下一个;而j都毋庸置疑的退回从头开始

因为如果i不回退,那就只找了主串中以第一个字符开头的子串,第二个到第n个字符开头的子串都没找,漏掉了怎么能说没找到

i必须回退的,就叫BF算法,也就朴素查找算法

串的模式匹配算法:(包含BF和KMP算法)

在主串中的pos(任意)位置开始查找,(不一定从0号位置开始,即不一定在全文中开始找),找到返回下标,没找到返回-1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/428555.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【王道操作系统】ch1计算机系统概述-05操作系统引导

文章目录 【王道操作系统】ch1计算机系统概述-05操作系统引导01 什么是操作系统引导02 磁盘里边有哪些相关数据(1)主引导记录(MBR)(2)活动分区(一般是C盘) 03 操作系统引导的过程 【…

你是否知道Python的列表翻转、排序和多维列表

1.reverse() 表示翻转列表中的元素,不会生成新列表 list1 [2343, 55, 4, 345, 676, 768] list1.reverse() print(list1) # [768, 676, 345, 4, 55, 2343] 2.sort() 对原列表元素进行排序,默认是升序 list1 [2343, 55, 4, 345, 676, 768] list1…

PHP【swoole】

前言 Swoole官方文档:Swoole 文档 Swoole 使 PHP 开发人员可以编写高性能高并发的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服务,让 PHP 不再局限于 Web 领域。Swoole4 协程的成熟将 PHP 带入了前所未有的时期, 为性能的提升提供了独一无…

JVM-JVM的垃圾回收机制

一,JVM的垃圾回收机制 IDEA 控制台输出JVM的GC日志,在 VM options 添加 -XX:PrintGCDetails 即可 1.1 如何判定垃圾对象 1.1.1 引用计数法 ​ 在每个对象都维护着一个内存字段来统计它被多少”部分”使用—引用计数器,每当有一个新的引用指向该对象时,引用计数器就…

【Python】进阶学习:pandas--rename()用法详解

【Python】进阶学习:pandas-- rename()用法详解 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的…

day34贪心算法 part03

1005. K 次取反后最大化的数组和 简单 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数…

软考57-上午题-【数据库】-数据库的控制功能

一、事务管理 1-1、事务的定义 事务是一个操作序列,这些操作,要么都做,要么都不做。 事务和程序是两个不同的概念,一般一个程序可以包含多个事务。 1-2、事务定义的语句 1、事务开始:BEGIN TRANSACTION 2、事务提…

LabVIEW齿轮传动健康状态静电在线监测

LabVIEW齿轮传动健康状态静电在线监测 随着工业自动化的不断发展,齿轮传动作为最常见的机械传动方式之一,在各种机械设备中发挥着至关重要的作用。然而,齿轮在长期运行过程中易受到磨损、变形等因素影响,进而影响整个机械系统的稳…

蓝桥杯集训·每日一题2024 (差分)

前言&#xff1a; 差分笔记以前就做了&#xff0c;在这我就不再写一遍了&#xff0c;直接上例题。 例题&#xff1a; #include<bits/stdc.h> using namespace std; int a[10009],b[100009]; int main(){int n,ans10,ans20;cin>>n;for(int i1;i<n;i){cin>>…

数字经济的新机遇:揭秘Web3的商业价值

引言&#xff1a; 随着技术的飞速发展和互联网的日益普及&#xff0c;数字经济已经成为了当今社会的重要组成部分。而在数字经济的蓬勃发展中&#xff0c;Web3技术被认为是一个颠覆性的力量&#xff0c;它不仅重新定义了数字世界的基础架构&#xff0c;还为商业创新带来了巨大…

嵌入式学习第二十四天!(进程间通信:消息队列、共享内存、信号灯)

进程间的通信&#xff1a; 消息队列、共享内存、信号灯&#xff1a; 1. IPC对象&#xff1a;内存文件 1. ipcs&#xff1a; 查看系统中的消息队列&#xff0c;共享内存、信号灯的信息 2. ipcrm&#xff1a; 删除消息队列、共享内存、信号灯 ipcrm -Q/-M/-S key ipcrm -q/-m/-s…

linux安装部署

jdk&tomcat安装 1.上传jdk、tomcat安装包 2.解压两个工具包 #解压tar -zxvf apache-tomcat-8.5.20.tar.gz#解压jdktar -zxvf jdk-8u151-linux-x64.tar.gz 3.配置并且测试jdk安装 #配置环境变量vim /etc/profile​#java environmentexport JAVA_HOME/soft/jdk1.8.0_151exp…

Whisper实现语音识别转文本

#教程 主要参考开源免费离线语音识别神器whisper如何安装&#xff0c; OpenAI开源模型Whisper——音频转文字 Whisper是一个开源的自动语音识别系统&#xff0c;它在网络上收集了680,000小时的多语种和多任务监督数据进行训练&#xff0c;使得它可以将多种语言的音频转文字。…

【学位论文】上海交通大学 研究生学位论文 本地保存

上海交大研究生学位论文网&#xff1a;http://thesis.lib.sjtu.edu.cn/ &#xff08;只能校内访问或SJTU VPN访问&#xff09; 如果希望下载论文&#xff0c;需要参考&#xff1a;https://github.com/olixu/SJTU_Thesis_Crawler 安装过程 安装过程的几个坑&#xff1a; &a…

【Java开发】Java实现调用微信机器人,发送企业微信通知

请直接看原文: 【Java开发】Java实现调用微信机器人&#xff0c;发送企业微信通知_java 企业微信推送机器人消息-CSDN博客 ------------------------------------------------------------------------------------------------------------------------------- 企业微信机器…

无需安装!7款一键在线UI设计利器

制作完原型后&#xff0c;需要优化界面。此时是UI设计师的任务。UI设计软件对设计师来说非常重要。UI设计工具的使用是否直接影响到最终结果的质量&#xff0c;所以有人会问:UI界面设计使用什么软件&#xff1f;这里有一些UI设计师和对UI设计感兴趣的朋友列出了五款好用免费的U…

Unity 动态加载音频和音效

想要加载音效和音频需要两个组件&#xff1a; 听&#xff1a; 播&#xff1a; 一收一发 在层级中&#xff0c;右键创建 音频源 &#xff0c;放入物体的子物体中。 播放 方式一 拖动需要播放的音频文件到&#xff0c;音频源组件中。 using System.Collections; using Syst…

java BIO

目录 Java BIO基本介绍 Java BIO工作机制 传统的BIO编程实例回顾 1、BIO模式下发送和接收消息 2、BIO模式下多发和多收消息 3、BIO模式下接收多个客户端 伪异步I/O编程 基于BIO形式下的文件上传 Java BIO模式下的端口转发思想 Java BIO基本介绍 Java BIO就是传统的jav…

Pytorch学习 day03(Tensorboard)

Tensorboard Tensorboard能够可视化loss的变化过程&#xff0c;便于我们查看模型的训练状态&#xff0c;也能查看模型当前的输入和输出结果 在Pycharm中&#xff0c;可以通过按住ctrl&#xff0c;并左键点击某个库来进入源文件查看该库的使用方法 SummaryWriter是用来向log_di…

C语言:指针(二)

目录 1.数组名的理解2.使用指针访问数组3.一维数组传参的本质4.二级指针5.指针数组6.字符指针变量7.数组指针变量8.二维数组传参的本质9.函数指针变量10.函数指针数组11.回调函数12.qsort函数13.使用回调函数模拟实现qsort函数 1.数组名的理解 int main() {int arr[] { 1,2,3…