讲解朴素字符串匹配算法

第1关:实现朴素的字符串匹配 and 第2关:实现KMP字符串匹配 样例输入: string tri 样例输出: Location: 1 int FindSubStr(char* t, char* p) /* 从字符串t查找子字符串p。 字符串以数值结尾,例如p="str",那么p[0]='s',p[1]='t',p[2]='r',p[3]=0。 采用朴素的匹配算法。 返回子字符串第一次出现的位置,例如t="string ring",p="ring",则返回2。 若没有找到,则返回-1。 */ { // 请在此添加代码,补全函数FindSubStr /* 阅读详情

朴素字符串匹配算法,也称为暴力匹配算法,是一种简单直观的字符串匹配算法。该算法的基本思想是从主串的第一个字符开始,逐个和模式串的字符进行比较,如果相等,则继续比较下一个字符,如果不相等,则从主串的下一个字符开始重新匹配。

具体的步骤如下:

  1. 遍历主串的每个字符,从第一个字符开始。
  2. 每次从主串的当前位置和模式串的第一个字符开始进行比较,如果相等,继续比较后续的字符。
  3. 如果模式串的所有字符都匹配成功,则说明找到了匹配的子串,返回匹配的起始位置。
  4. 如果模式串的某个字符与主串的当前字符不匹配,则将主串的起始位置后移一位,重新从第一个字符开始匹配。
  5. 如果主串的遍历完成后仍然没有找到匹配的子串,则表示匹配失败,返回-1。

朴素字符串匹配算法的时间复杂度为O(n*m),其中n是主串的长度,m是模式串的长度。在最坏情况下,需要比较的次数为(n-m+1)*m,即主串的长度减去模式串的长度加1,乘以模式串的长度。

朴素字符串匹配算法的优点是简单易懂,实现起来比较简单。缺点是效率较低,在处理大规模数据时效率较低。如果待匹配的数据量很大,建议使用其他高效的字符串匹配算法,如KMP算法、Boyer-Moore算法等。

【数据结构】朴素模式匹配 & KMP算法 💯KMP算法就是消除指针i的回溯,让i指针只进不退,而只移动模式串指针指向位置的方法,由于此时"$p_1...p_{k-1}$"和"$p_{j-k+1}..p_j$"都是相同的,所以这时候相当于将$j1$指针指向前缀,$j1$不断前移,$j2$指针指向后缀,$j2$不断后移(这里j1是主动指针,而j2相当于从动指针),因为只要保证他们一直为之前的公共前缀,就可以不用在意这$k'-1$长度的子串,这样主要考虑的就是要找到前缀中的一个值 $p_k'=p_j$ 阅读详情

相关推荐

字符串匹配——朴素算法、KMP算法

字符串匹配(string match)是在实际工程中经常会碰到的问题,通常其输入是原字符串(String)和子串(又称模式,Pattern)组成,输出为子串在原字符串中的首次出现的位置。通常精确的字符串搜索算法包括朴素搜索算法,KMP, BM(Boyer Moore), sunday, robin-karp 以及 bitap。下面分析朴素搜索算法和KMP这两种方法并给出其实现。假设原字符T串长度N

sinat_24520925的专栏 8748

第1关:实现朴素的字符串匹配

int FindSubStr(char* t, char* p); #include <stdio.h> #include <stdlib.h> #include "mystr.h" #pragma warning(disable:4996) int main() { // to test finding the first son string char t[100]; // mother string char p[100]; // son string scanf(

Keep_Trying_Go的博客 4101

kmp算法白话解析

kmp

欢迎订阅 -- 小源笔迹 7528

字符串——字符串匹配

文章目录字符串匹配导论一、基本概念字符串匹配问题符号和术语后缀重叠引理二、朴素字符串匹配算法三、Rabin-Karp算法 字符串匹配导论 一、基本概念 字符串匹配问题 假设文本是一个长度为nnn的数组T[1…n]T[1 \ldots n]T[1…n],而模式是一个长度为mmm的数组P[1…m]P[1 \ldots m]P[1…m],其中m≤nm \leq nm≤n,进一步假设PPP和TTT的元素都是来自一个有限的字母集∑\sum∑的字符。数组TTT和PPP通常被称为字符串。 如果0≤s≤n−m0 \leq

jiahonghao2002的博客 1744

字符串朴素模式匹配算法

大连理工大学数据结构上机题字符串朴素模式匹配算法字符串朴素模式匹配算法字符串朴素模式匹配算法字符串朴素模式匹配算法

WPF 解决listview值更改时页面没有刷新

WPF 解决listview值更改时页面没有刷新。

weixin_52475977的博客 1385

字符串的模式匹配(朴素模式匹配算法,KMP算法)

假设主串长度为n,模式串长度为m.朴素模式匹配算法︰将主串中所有长度为m的子串依次与模式串对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。最多对比n-m+1个子串。

jungleirim的博客 1532

【全局路径规划地图算法】Voronoi路径规划探索(附C++代码)

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!本文先对Voronoi路径规划探索做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章提示:以下是本篇文章正文内容。

qq_35635374的博客 2239

朴素匹配和KMP算法

接下来遍历这个模式串,当下标之为0的时候,对于模式串中的字符a它前面没有内容,我们这时候用-1标记,当下标值为2的之后,他前面只有一个a,对于这个字符,它没有前缀,所以我们在next数组里面填0,当下标值为2是,它前面的字符ab,这个字符的前缀为a,后缀为b,没有相同的部分,所以继续标记0,当下标值为3时,它前面的字符为aba,它的前缀为a,ab,后缀为a,ba,这时相同的前缀为a它的长度为1,所以我们在next数组的相应位置标记1,基于此,我们可以把next数组填充满,即为{-1,0,0,1,1,2}。

2401_87215577的博客 566

Python爬虫实战:实时监控美国SEC官网文件更新,助你第一时间掌握市场动态

在资本市场中,信息就是财富。美国证券交易委员会(SEC)官网公开了大量公司披露文件,涵盖财报、招股说明书、内幕交易等重要信息。对投资者、分析师及法律合规人员来说,实时监控这些公开文件具有重要价值。

2201_76125261的博客 594

18、偏微分方程数值计算:粘性不可压缩流与电磁学的有限元方法

本文系统介绍了偏微分方程数值计算在粘性不可压缩流与电磁学中的应用,重点探讨了稳态与非稳态Navier-Stokes问题的混合有限元方法及求解技术,包括弱形式构建、半离散与时间离散格式、牛顿迭代法等。同时,详细阐述了电磁学中Maxwell方程的有限元与时域有限差分法(FDTD)求解方法,涵盖时间谐波与时域波方程、边界条件处理、稳定性分析与误差估计。结合MATLAB代码示例和实际案例,展示了速度场、压力、电场与磁场的数值模拟过程,并通过流程图与表格对比了两类问题的方法原理、应用场景与收敛性特性。最后展望了多物理

lemon的博客 87

算法系列——字符串匹配朴素算法和KMP算法

字符串匹配算法主要是两类,最基本的暴力解法,也叫做朴素算法,另一种是KMP算法。本篇给出两种算法的最简单化的写法,便于面试时记忆和书写,当然重点还是理解其算法思想。朴素匹配算法被搜索的字符串称为主串,待搜索的字符串称为模式串。朴素模式匹配算法的基本思想: 对主串的每一个字符作为子串开头,与模式串进行匹配。对主串做大循环,每个字符开头做模式串长度的小循环,直到匹配成功或全部遍历完成为止。 Java

BridgeGeorge 2833

【Bug已解决】Codex 切换 model_provider 后历史会话消失的解决方案

方案适用场景推荐指数切回原 provider 验证排查的第一步,确认数据是否真的丢失⭐⭐⭐⭐⭐查看本地会话文件进一步确认数据完整性⭐⭐⭐⭐⭐查阅跨 provider 恢复命令官方是否提供了对应功能⭐⭐⭐使用社区辅助工具需要频繁切换 provider 的场景⭐⭐⭐定期备份配置目录任何场景下的通用保险措施⭐⭐⭐⭐切换后历史会话"消失"的本质是客户端的会话列表展示逻辑受当前活跃 provider 状态过滤,而不是原始数据文件被真正删除。

一键难忘的博客 5999

字符串匹配算法

首先引用一下另一篇文章中对字符串匹配的介绍:字符串匹配指的是从文本中找出给定字符串(称为模式)的一个或所有出现的位置。本文的算法一律输出全部的匹配位置。模式串在代码中用x[m]来表示,文本用y[n]来,而所有字符串都构造自一个有限集的字母表Σ,其大小为σ。根据先给出模式还是先给出文本,字符串匹配分为两类方法:第一类方法基于自动机或者字符串的组合特

roden的专栏 1297

【图像超分】论文复现:经典超分 | SAN的Pytorch源码复现,跑通源码,适配高版本的python/pytorch/cuda,使用EDSR-PyTorch进行训练和测试

本文介绍了单幅图像超分辨率重建方法SAN(二阶注意网络)的代码实现。文章详细说明了在高版本Python/Pytorch环境下适配SAN源码的方法,并提供了修改后的完整代码和预训练模型下载链接。 主要亮点包括: 将SAN模型实现整合到EDSR-Pytorch框架中,解决了高版本环境下的兼容性问题 提供了完整的数据集准备指南(DIV2K训练集和5个测试集) 给出了详细的测试命令,涵盖x2、x3、x4不同放大倍率 公开了预训练模型和可视化结果的下载资源 提供了修改后的适配高版本环境的代码。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

智能运营模型的建设与运用实践

一项运营活动的全流程,主要包含客群挖掘与筛选、产品与权益选择、触点与活动选择、运营策略调优等关键环节,涉及客群管理、活动管理、权益管理、触达管理、智能调控等系统支撑需求,如今工商银行已开展与其相对应的推荐模型、分析模型等的研发与实践。自2023年9月该模型被知客运营平台吸收并上线以来,已累计有远程银行中心、吉林分行、重庆分行等30余家分行或机构使用,赋能融e借、积存金、结售汇、基金、理财、存款等12种场景,产生营销客户清单达千万人次,有力促进了保守型理财、天天盈、添益快线、寿险等产品的销售。

银行信息系统应用架构详解 847

字符串转byte数组_字符串匹配算法总览

字符串匹配在文本处理里非常重要,我们采用简洁的python代码把以下算法一一实现并讲解。朴素算法 (Naive Algorithm)Rabin-Karp 算法有限自动机算法(Finite Automation) Knuth-Morris-Pratt 算法(KMP Algorithm)Boyer-Moore 算法Simon 算法Colussi 算法Galil-Giancarlo 算法Apostoli...

weixin_42550597的博客 243

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【模式匹配】——KMP算法

本文重点讲了“串”的数据结构;KMP算法的实现和推导!(含详细图例演示!!)

2301_76695577的博客 1146

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

字符串模式匹配——KMP算法

KMP算法匹配字符串 朴素匹配算法   字符串的模式匹配的方法刚开始是朴素匹配算法,也就是经常说的暴力匹配,说白了就是用子串去和父串一个一个匹配,从父串的第一个字符开始匹配,如果匹配到某一个失配了,就重新去从父串的下一个字符开始匹配,这样的算法虽然理解起来容易,但是算法的时间复杂度无疑是很高的,假如父串是一个很长的字符串,而字串恰恰不和父串匹配,那无疑是对CPU的迫害。   下面贴几张图看看这...

vfdxvffd的博客 234

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

字符串匹配

在前面的《最长公共子序列LCS问题》中,我们采用动态规划求解了两个字符串的最长公共子序列的问题,在《最长公共子串》中,我们又用动态规划解决了两个字符串的最长公共子串问题。其中公共子序列问题更加一般,它不要求匹配结果是连续的,公共子串相对特殊一点,它要求匹配连续的子串,二者都不要求其中一个字符串必须完全匹配。在《字典树》中,我们知道字典树也可以用来高效匹配字符串,首先它要求从头开始匹配,其次它匹配的

wyc的专栏 1320

【数据结构与算法】字符串匹配(头歌习题)【合集】

【数据结构与算法】字符串匹配(头歌习题)【合集】

2301_76435948的博客 3015

字符串匹配:从朴素算法到KMP

摘要 本文深入解析KMP字符串匹配算法的原理与实现。相比朴素算法逐个字符匹配的低效性,KMP算法通过预处理模式串的最长前缀后缀(LPS)表,利用匹配失败时的部分匹配信息实现智能跳转。文章详细阐述了LPS的定义与构建方法,通过模式串"GOOGLEGOOD"等实例演示如何利用字符串自重复性优化匹配过程。核心在于当匹配失败时,根据LPS表将模式串指针回退到可能匹配的位置,避免不必要的比较。伪代码展示了LPS表构建和匹配过程的实现细节,体现了KMP算法如何通过O(n+m)的时间复杂度实现高效匹配

CoccusQ的博客 863

朴素模式匹配算法和KMP算法是字符串匹配中的两种经典方法,各有特点

- j=0, k=-1 → 进入 if → j=1, k=0 → next[1]=0 - j=1, k=0 → p[1]='b', p[0]='a' → 不等 → k = next[0] = -1 - j=1, k=-1 → if 成立 → j=2, k=0 → next[2]=0 - j=2, k=0 → p[2]='a' == p[0]='a' → j=3, k=1 → next[3]=1 - j=3, k=1 → p[3]='b' == p[1]='b' → j=4, k=2 → next[4]=2

[Blog][Domain] programb.blog.youkuaiyun.com 836

【串】串的模式匹配算法(BF+KMP)(C语言)

串的模式匹配算法(C语言) 1.字符串的初始化函数 定义一个字符数组S,我们用第0位来存储该字符串的长度,其余位置顺序存储该字符串。(字符串的首位从1开始) 代码实例: #include <stdio.h> #include <string.h> #define N 100 /*静态定义数组的长度*/ typedef char String[N]; // String s1 等价于 char s1[N] int StrAssign(String T,

weixin_51424157的博客 3967

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

先复习一下朴素串匹配算法: #朴素串匹配算法 def navie_matching(t, p): m, n = len(p), len(t) i, j = 0, 0 while i < m and j < n: # i == m 说明找到匹配 if p[i] == t[j]: # 字符相同, 考虑下一对字符 i,...

sinat_30281495的博客 240
上一篇: 讲解贪心算法
下一篇: 讲解KMP算法
懒人刘
博客等级 码龄4年 541粉丝 263原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值