04-4.2.1 朴素模式匹配算法

  • 👋 Hi, I’m @Beast Cheng
  • 👀 I’m interested in photography, hiking, landscape…
  • 🌱 I’m currently learning python, javascript, kotlin…
  • 📫 How to reach me --> 458290771@qq.com

喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会不断更新。🧑‍💻
此外,《程序员必备技能》专栏日后会逐步更新,感兴趣的小伙伴可以点一下订阅、收藏、关注!🚀
谢谢大家!🙏

引言

主串:“红红火火恍恍惚惚红红火火笑出猪叫哈哈哈哈哈哈哈试试哦沙发”
主串中斜体的笑出猪叫就是与模式串匹配的子串
模式串:“笑出猪叫”
模式串:“笑出狗叫”

字符串模式匹配:在主串中找到与模式相同的子串,并返回其所在位置
子串:主串的一部分,一定存在
模式串:不一定能在主串中找到

思想

主串长度为 n ,模式串长度为 m
将主串中所有长度为 m 的子串依次与模式串对比,知道找到一个完全匹配的子串,或所有的子串都不匹配为止
最多对比 n − m + 1 n-m+1 nm+1 个子串
事实上,这个过程和上一节中的 Index(S, T) 定位操作一样[[4.1.2 串的存储结构#Index(S, T) 定位]]
接下来,尝试不使用字符串的基本操作,直接通过数组下标实现朴素模式匹配算法
若当前子串匹配失败,则主串指针 i 指向下一个子串的第一个位置,模式串指针 j 回到模式串的第一个位置

i = i - j + 2;
j = 1;

j > T.length ,则当前子串匹配成功,返回当前子串第一个字符的位置—— i - T.length
具体代码实现:

int Index(SString S, SString T){int i = 1, j = 1;while(i <= S.length && j <= T.length){if(S.ch[i] == T.ch[i]){++i;++j;        // 继续比较后面的字符}else{i = i-j+2;j = 1;          // 指针后退开始重新匹配}}if(j > T.length)return i-T.length;elsereturn 0;
}

最坏时间复杂度 = O ( n m ) O(nm) O(nm)
最坏的情况,每个子串都要对比 m 个字符,共 n − m + 1 n-m+1 nm+1 个子串
复杂度 = O ( ( n − m + 1 ) m ) = O ( n m ) (很多时候, n ≫ m ,所以可以把 m 2 给去掉) =O((n-m+1)m) = O(nm)\,\,\,\,(很多时候,n \gg m,所以可以把 m^2给去掉) =O((nm+1)m)=O(nm)(很多时候,nm,所以可以把m2给去掉)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定个小目标之刷LeetCode热题(14)

了解股票的都知道&#xff0c;只需要选择股票最低价格那天购入&#xff0c;在股票价格与最低价差值最大时卖出即可获取最大收益&#xff0c;总之本题只需要维护两个变量即可&#xff0c;minPrice和maxProfit&#xff0c;收益 prices[i] - minPrice,直接用代码描述如下 class …

vscode中执行python语句dir(torch)不返回结果

输入半天&#xff0c;发现在IDLE运行后的shell界面输入语句就会返回一大串。但是在vscode中老是不返回值。 结果恍然发现这没加print&#xff08;&#xff09;。 无语惨了。 家人们&#xff0c;这是python&#xff0c;而不是matlab。思维还没转换过来&#xff0c;笑死

umap降维,c++用法纪实

全是血泪&#xff0c;可惜对于大量数据&#xff0c;速度还是太慢。 一、代码 // ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream>#include "knncolle/knncolle.hpp" #include "Umap.…

[数据集][图像分类]人种黄种人白人黑人等分类数据集56000张7类别

数据集类型&#xff1a;图像分类用&#xff0c;不可用于目标检测无标注文件 数据集格式&#xff1a;仅仅包含jpg图片&#xff0c;每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数)&#xff1a;56000 分类类别数&#xff1a;7 类别名称:[“Black”,“East_Asian”,“Ind…

Vue3【十三】watch监视

Vue3【十三】watch监视 Vue3 中的watch祝你能监视以下四种数据 ref 定义的数据reactive定义的数据函数返回一个值一个包含上述内容的数组 案例截图 目录结构 案例代码 Person.vue <template><div class"person"><!-- <h1>Watch情况1&#xff…

大学生学习Java路线2024版

第一阶段&#xff1a;基础入门 了解计算机基础&#xff1a; 学习基本的计算机科学知识&#xff0c;如操作系统、数据结构和算法。 Java语言概述&#xff1a; 了解Java语言的历史、特点和应用领域。 安装开发环境&#xff1a; 安装JDK和IDE&#xff08;如IntelliJ IDEA或Eclipse…

C++基础编程100题-008 OpenJudge-1.3-06 甲流疫情死亡率

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0103/06/ 描述 甲流并不可怕&#xff0c;在中国&#xff0c;它的死亡率并不是很高。请根据截止2009年12月22日各省报告的甲流确诊数和死亡数&#xff0c;计算甲流在各省的死亡率。 输入 输入仅一行&#xff…

数据中心运维管理方案

数据中心运维管理方案 随着数据中心在现代信息社会中的重要性日益增加&#xff0c;高效、可靠的运维管理方案成为保障其稳定运行的关键。本文将探讨数据中心运维管理的策略和实践&#xff0c;旨在为运维团队提供全面、系统的管理方法&#xff0c;确保数据中心在任何情况下都能…

mysql高级用法常用函数

mysql高级用法 1、自定义排序 select * from movies order by field(actors, 成龙, 靳东, 刘亦菲, 范冰冰); // 字段中存在null值 select * from movies order by field (coalesce(actors,null),成龙, 靳东, 刘亦菲, 范冰冰,null)2、空值NULL排序&#xff08;ORDER BY IF(ISN…

python中字典和集合数据存储的异同分析

1. 字典的简单说明 字典&#xff08;Dictionary&#xff09;是Python中一种非常重要和常用的数据结构。以下是字典的主要特点&#xff1a; 字典以键值对&#xff08;key-value pair&#xff09;的形式存储数据。每个键&#xff08;key&#xff09;是唯一的&#xff0c;键和值&…

Word Split Line

Word Split Line 分割线 https://download.csdn.net/download/spencer_tseng/89413772

JSON.parse的使用方法和基本定义

JSON.parse()是JavaScript中用于将JSON字符串解析为JavaScript对象的方法。 一、基本用法 JSON.parse()方法接收一个有效的JSON字符串作为参数&#xff0c;返回一个对象或数组。 如果传入的参数不是有效的JSON字符串&#xff0c;则会抛出错误。 二、参数 JSON.parse()方法可…

小柴带你学AutoSar系列一、基础知识篇(5)makefile基础

Flechazohttps://www.zhihu.com/people/jiu_sheng 小柴带你学AutoSar总目录https://blog.csdn.net/qianshang52013/article/details/138140235?spm=1001.2014.3001.5501

国内docker镜像站全军覆没 如何自己部署一个Docker镜像加速服务器?

近日&#xff0c;在使用SJTUG提供的镜像加速拉取镜像的时候死活拉不下来&#xff0c;不管是 docker hub 还是国内的某些镜像站&#xff0c;同样都无法使用&#xff0c;虽然现在还有部分可用的镜像站&#xff0c;但也说不准某一天因为某些原因同样停止提供了&#xff0c;这时候就…

MAC地址简介

一、MAC和ip地址 很多同学只知道ip地址&#xff0c;同时也知道ip在网络通讯中的重要性&#xff0c;实际上要实现网络通信的话&#xff0c;除了ip地址外还需要MAC地址的配合&#xff0c;只有在这两种地址的配合之下才能完整的实现互联网的通信。但是由于MAC地址的使用&#xff0…

华为防火墙配置 SSL VPN

前言 哈喽&#xff0c;我是ICT大龙。本期给大家更新一次使用华为防火墙实现SSL VPN的技术文章。 本次实验只需要用到两个软件&#xff0c;分别是ENSP和VMware&#xff0c;本次实验中的所有文件都可以在文章的末尾获取。话不多说&#xff0c;教程开始。 什么是VPN 百度百科解…

持续总结中!2024年面试必问 20 道分布式、微服务面试题(六)

上一篇地址&#xff1a;持续总结中&#xff01;2024年面试必问 20 道分布式、微服务面试题&#xff08;五&#xff09;-CSDN博客 十一、什么是服务编排和服务编排工具&#xff1f; 服务编排&#xff08;Service Orchestration&#xff09;是一种设计模式&#xff0c;用于管理…

Java核心: 类加载器

这一节我们来学习Java的类加载器&#xff0c;以及常用的类加载器实现URLClassLoader。 1. Java类加载器 类加载器用于将字节码读取并创建Class对象。我们知道JVM本身是用C写的&#xff0c;一开始执行的时候由C程序来加载并引导字节码的运行&#xff0c;这些由C编写的加载字节…

LVGL网格布局测试

一、测试1 static lv_coord_t col_dsc[] = { 80, 80, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST };static lv_coord_t row_dsc[] = { 45, LV_GRID_TEMPLATE_LAST };lv_obj_t* page = lv_img_create(lv_scr_act());lv_obj_center(page);lv_obj_set_size(page, 800, 600);isu_set_ob…

[数据集][目标检测]攀墙攀越墙壁数据集VOC格式-701张

数据集格式&#xff1a;Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件&#xff0c;仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数)&#xff1a;701 标注数量(xml文件个数)&#xff1a;701 标注类别数&#xff1a;1 标注类别名称:["fq"] 每个类别标…