数据结构––kmp算法(串)

devtools/2024/11/14 20:11:27/

kmp算法作为串的一个重要内容,必然有一定的难度,而在看到各类教辅书里的概念与解释后,其晦涩难懂的内容直接劝退一部分人,现在,让我们来看看吧

KMP解决的问题类型

KMP算法的作用就是在一个已知的字符串中查找子串的位置,就是串的匹配模式。比如,主串a = “cabcabcde”,子串b = “ab”。而我们就是要在a中找b的位置,那么这么看来是很简单的,但是,如果是字符串很长的时候呢?这样找起来就很麻烦了。接下来就介绍2种方法。

方法一:暴力求解法(BF算法)

从主串a和子串的第一个字符开始,将2个字符串的字符一一匹配,如果不匹配,主串就从第二个字符,子串从第一个字符开始再次匹配,如果不匹配,就从主串第三个字符,子串第一个字符开始。

那么,暴力求解法为什么这么慢呢?因为回溯的次数太多了

方法二:

每一个字符前的字符串都有最长相等前后缀,而且最长相等前后缀的长度是我们移位的关键,所以我们单独用一个next数组存储子串的最长相等前后缀的长度。而且next数组的数值只与子串本身有关。
所以next[i]=j,含义是:下标为i 的字符前的字符串最长相等前后缀的长度为j。
我们可以算出,子串t= "abcabcmn"的next数组为next[0]=-1(前面没有字符串单独处理)


http://www.ppmy.cn/devtools/8113.html

相关文章

Mysql学习2

目录 一.数据库: 1.创建数据库: 2.查看数据库: 3.备份恢复数据库: 二.表 1.创建表指令: 2.MySQL常用数据类型: 3.删除与修改表(重点): 4.数据库CRUD语句&#xf…

书生·浦语大模型全链路开源体系-第4课

书生浦语大模型全链路开源体系-第4课 书生浦语大模型全链路开源体系-第4课相关资源XTuner 微调 LLMXTuner 微调小助手认知环境安装前期准备启动微调模型格式转换模型合并微调结果验证 将认知助手上传至OpenXLab将认知助手应用部署到OpenXLab使用XTuner微调多模态LLM前期准备启动…

【k8s】(五)kubernetes1.29.4离线部署之-初始化第一个控制平面

备注: 完整版请参阅 【k8s】Kubernetes 1.29.4离线安装部署(总) 执行命令初始化第一个控制平面节点 在上节的安装过程中,实际以及包含了初始化第一个控制平面的脚本,由于其重要性,这里单独提出来详细说明。…

[ LeetCode ] 题刷刷(Python)-第35题:搜索插入位置

题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 nums 为 无重复元素 的 升序 排列数组 请必须使用时间复杂度为 O(log n) 的算法。 示例 示例 1: 输入: …

TensorFlow 1.x的学习

.为什么还有很多人都选择使用TensorFlow 1.x 兼容性问题: TensorFlow 1.x在一些旧项目中已经得到了广泛应用,这些项目可能依赖于1.x版本的特定API或行为。升级到2.x可能需要大量的代码修改和测试工作,对于一些已经稳定运行的项目,维护者可能…

蓝桥杯 BASIC-16 基础练习 分解质因数

蓝桥杯 BASIC-16 基础练习 分解质因数 问题描述 求出区间[a,b]中所有整数的质因数分解。 输入格式 输入两个整数a&#xff0c;b。 输出格式 每行输出一个数的分解&#xff0c;形如ka1*a2*a3…(a1<a2<a3…&#xff0c;k也是从小到大的)(具体可看样例) 样例输入 3 10 样例输…

sql~ 将一行转为多行

转义字符 在正则表达式中&#xff0c;\\[|\\] 是一个模式&#xff0c;它匹配的是字符 [ 或者 ] | 是一个特殊字符&#xff0c;表示“或”操作&#xff0c;也就是说&#xff0c;它会匹配它左边或者右边的字符\\[ 和 \\] 是对特殊字符 [ 和 ] 的转义&#xff0c;因为在正则表达式…

.NET高级面试指南专题二十五【 建造者模式介绍,将复杂对象的构建过程与其表示分离】

建造者模式是一种创建型设计模式&#xff0c;用于将复杂对象的构建过程与其表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。它允许客户端通过指定要构建的类型和可选参数来构建对象&#xff0c;而不需要了解对象的具体构建细节。 优点&#xff1a; 将构建过程封装…