首页 > 编程语言 >KMP算法(简单易懂版)

KMP算法(简单易懂版)

时间:2024-07-23 17:58:26浏览次数:12  
标签:子串 字符 匹配 前缀 后缀 算法 KMP 此时 易懂

首先举个例子,

第一步

此时,B与A的值不匹配。

第二步

红色箭头左边的主串与模式串的元素是完全匹配的。

第三步

模式串中有“AB”子串是相同的。

第四步

直接移动模式串,使前缀移动到后缀的位置。

最长公共前后缀:

···前缀:不包含最后一个字符的所有以第一个字符开头的连续子串。

···后缀:不包含第一个字符的所有以最后一个字符结尾的连续子串。

 第五步:

此时,B与A不匹配。

第六步

此时,红色箭头左边的元素全部上下匹配。那么,我们开始寻找最长公共前后缀。

第七步

此时,根据最长公共前后缀的定义,我们找到A是粉红色框作为前缀和后缀。

第八步

此时,模式串超出主串的范围了,就可以判定匹配失败。

以上是KMP算法的简单理解。

标签:子串,字符,匹配,前缀,后缀,算法,KMP,此时,易懂
From: https://blog.csdn.net/2401_82456039/article/details/140637585

相关文章

  • 【学术会议征稿】第八届控制工程与先进算法国际论坛(IWCEAA 2024)
    第八届控制工程与先进算法国际论坛 8th International Workshopon ControlEngineering and AdvancedAlgorithms(IWCEAA 2024)第八届控制工程与先进算法国际论坛(IWCEAA 2024)将于2024年11月1-3日在中国南京隆重举行。会议旨在为从事算法、控制工程与计算机技术研究......
  • 算法笔记|Day5哈希表基础
    算法笔记|Day5哈希表基础☆☆☆☆☆leetcode242.有效的字母异位词题目分析代码☆leetcode49.字母异位词分组(待补充)题目分析代码☆leetcode438.找到字符串中所有字母异位词(待补充)题目分析代码☆☆☆☆☆leetcode349.两个数组的交集题目分析代码☆leetcode350.两......
  • 算法:求最后一个单词的长度
    题目要求 解答1:暴力解决classSolution(object):deflengthOfLastWord(self,s):""":types:str:rtype:int"""input_list=[iforiins.split("")ifi!=""]......
  • Johnson 全源最短路算法以及 Primal-Dual 原始对偶算法
    Johnson全源最短路算法引入:多源最短路问题,设点数为\(n\)边数为\(m\)。我们有如下方案:floyd,时间复杂度\(O(n^3)\),适合任意图。Bellman-ford(SPFA),时间复杂度\(O(n^2m)\),适合任意图。Dijkstra,时间复杂度\(O(nm\logm)\),适合非负权图。综上分析,我们发现:Dijkstra的时间......
  • 代码随想录算法训练营第20天 | 二叉搜索树中级
    2024年7月22日题235.二叉搜索树的最近公共祖先普通解法还是和普通的祖先一样求即可,再依据搜索树特性进行剪枝即可加速。importjava.util.*;classSolution{Vector<TreeNode>vec1;Vector<TreeNode>vec2;intflag1=0;intflag2=0;publicT......
  • 简单架构:采集库dll、检测算法dll、项目程序exe,框架库dll
    一般项目exe通过调用各种封装的dll来完成工作。视觉项目exe调用采集库dll、检测算法dll就可以了,有一定积累后凝练出框架库dll(日志、队列、线程池等必不可少的部分封装)它们之间通过“接口函数+数据”来配合。针对采集dll:IGrabber.h里放接口函数,如开始采集、停止采集、set参数......
  • 【论文解读】大模型算法发展
    一、简要介绍 论文研究了自深度学习出现以来,预训练语言模型的算法的改进速度。使用Wikitext和PennTreebank上超过200个语言模型评估的数据集(2012-2023年),论文发现达到设定性能阈值所需的计算大约每8个月减半一次,95%置信区间约为5到14个月,大大快于摩尔定律下的硬......
  • 代码随想录算法训练营第18天 | 二叉搜索树进阶
    2024年7月20日题530.二叉搜索树的最小绝对差使用递归获取中序遍历,然后遍历一遍vector即可得到结果。importjava.util.*;classSolution{Vector<Integer>vec;publicintgetMinimumDifference(TreeNoderoot){//首先得到中序遍历的结果vec......
  • # 代码随想录算法训练营第38天 | 01背包问题:1049.最后一块石头的重量II(最多能装多少)、
    1049.最后一块石头的重量IIhttps://leetcode.cn/problems/last-stone-weight-ii/代码随想录https://programmercarl.com/1049.最后一块石头的重量II.html#算法公开课494.目标和https://leetcode.cn/problems/target-sum/description/代码随想录https://programmercarl.com......
  • 目标检测算法
    目标检测算法是计算机视觉领域中的一项核心技术,旨在从图像或视频中识别和定位一个或多个特定对象实例。这些算法不仅需要确定对象的位置(如通过边界框),还需要识别对象的类别(如人、汽车、狗等)。随着深度学习技术的快速发展,基于深度神经网络的目标检测算法已成为主流,并在各种应......