关键词查找【Knuth-Morris-Pratt (KMP) 算法】

一个视频让你彻底学懂KMP算法_哔哩哔哩_bilibili

KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。

public class KMP {// 计算部分匹配表 (LPS)private static int[] computeLPSArray(String pattern) {int[] lps = new int[pattern.length()];int length = 0; // 长度为当前最长前缀后缀int i = 1;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(length)) {length++;lps[i] = length;i++;} else {if (length != 0) {length = lps[length - 1]; // 回溯} else {lps[i] = 0;i++;}}}return lps;}// KMP 查找算法public static boolean kmpSearch(String text, String pattern) {int[] lps = computeLPSArray(pattern);int i = 0; // 文本的索引int j = 0; // 模式串的索引while (i < text.length()) {if (pattern.charAt(j) == text.charAt(i)) {i++;j++;}if (j == pattern.length()) {return true; // 找到匹配} else if (i < text.length() && pattern.charAt(j) != text.charAt(i)) {if (j != 0) {j = lps[j - 1]; // 根据 LPS 表回溯} else {i++;}}}return false; // 未找到匹配}public static void main(String[] args) {String text = "aaaaaaac";String pattern = "aaaac";boolean found = kmpSearch(text, pattern);if (found) {System.out.println("子串 \"" + pattern + "\" 在主串中出现过。");} else {System.out.println("子串 \"" + pattern + "\" 在主串中未出现。");}}
}

相关:
https://blog.csdn.net/qq_43197840/article/details/140680621?spm=1001.2014.3001.5501
https://blog.csdn.net/qq_43197840/article/details/140679425?spm=1001.2014.3001.5501

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

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

相关文章

Arduino学习笔记1——IDE安装与起步

一、IDE安装 去浏览器直接搜索Arduino官网&#xff0c;点击Software栏进入下载界面&#xff0c;选择Windows操作系统&#xff1a; 新版IDE下载不需要提前勾选所下载的拓展包&#xff0c;下载好后直接点击安装即可。 安装好后打开Arduino IDE&#xff0c;会自动开始下载所需的…

npm publish出错,‘proxy‘ config is set properly. See: ‘npm help config‘

问题&#xff1a;使用 npm publish发布项目依赖失败&#xff0c;报错 proxy config is set properly. See: npm help config 1、先查找一下自己的代理 npm config get proxy npm config get https-proxy npm config get registry2、然后将代理和缓存置空 方式一&#xff1a; …

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序

基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序 实现流程 访问用户的桌面录屏并且显示视频源&#xff08;位置居中&#xff09;。对视频源进行实时目标检测。在检测到的目标周围绘制边界框&#xff0c;并用它们的类别和检测置信度进行标记。在视频源下方显示一个…

openEuler安装docker,加速镜像拉取

文章目录 文章来源1.配置镜像源2.编辑配置文件3.安装想要的版本4. ~ 原神&#xff01;5.由于很多镜像无法拉取配置镜像源 文章来源 http://t.csdnimg.cn/zYDYy 原文连接 由于之前的仓库不让用且 1.配置镜像源 由于 国外的镜像仓库好多不让用 所以配置阿里的镜像源 yum-confi…

Memcached开发(七):使用Java进行操作

目录 1. 安装与配置Memcached 1.1 安装Memcached 1.2 配置Memcached 2. 使用Java与Memcached进行交互 2.1 安装Java客户端 2.2 连接Memcached 2.3 基本操作 2.3.1 设置键值对 2.3.2 获取键值对 2.3.3 删除键值对 2.3.4 检查键是否存在 2.3.5 增加和减少数值 2.4 高…

使用 com.alibaba:easyexcel 导出excel文件时遇到的问题

1.字符长度超出限制 java.lang.IllegalArgumentException: The maximum length of cell contents (text) is 32,767 characters 解决方案&#xff1a; 1. 把字符串截取前32767个字符 /*** sqlText 字段导出 excel 时的转化器*/ public class SqlTextConverter implements C…

javascript 如何将 json 格式数组转为 excel 表格| sheetJS

案例 // https://unpkg.com/xlsx0.18.5/dist/xlsx.full.min.js function exportXlsx(jsonData, fileName , mine null) {const workbook XLSX.utils.book_new();// 将JSON数组转换成工作表const worksheet XLSX.utils.json_to_sheet(jsonData);// 向工作簿添加工作表XLSX.…

建造者模式(Builder Pattern)工作原理

文章目录 [toc]建造者模式&#xff08;Builder Pattern&#xff09;工作原理一、基本概念二、主要角色三、工作流程&#xff08;一&#xff09;定义产品&#xff08;二&#xff09;定义抽象建造者&#xff08;三&#xff09;定义具体建造者&#xff08;四&#xff09;定义指挥者…

Git操作指令

Git操作指令 一、安装git 1、设置配置信息&#xff1a; # global全局配置 git config --global user.name "Your username" git config --global user.email "Your email"2、查看git版本号 git -v # or git --version3、查看配置信息&#xff1a; git…

云计算复习--虚拟化技术

文章目录 虚拟化技术定义与原理虚拟机监视器&#xff08;VMM&#xff09;虚拟化技术服务器虚拟化存储虚拟化网络虚拟化应用虚拟化 关键技术新型虚拟化技术发展进展作业 虚拟化技术定义与原理 定义&#xff1a;虚拟化技术是一种将计算机物理实体&#xff08;如服务器、存储设备…

携手知“食”达人,黄浦两大商圈举办舌尖上的创意盛宴

7月22日&#xff0c;2024第十二届上海市“中华杯”职业技能竞赛——中华美食创新创意大赛活动暨第二届【南京路步行街】新中式美食创意大赛暨风情【淮海路】摩登名点创新大赛顺利落下帷幕。活动现场&#xff0c; “‘盛夏好食光’——特色创意美食焕新菜单” 正式发布。 大赛主…

Spring Boot组成的分布式系统中实现日志跟踪

Spring Boot组成的分布式系统中实现日志跟踪 首发2024-07-25 08:54潘多编程 在分布式系统中&#xff0c;日志跟踪是一项非常重要的功能&#xff0c;它帮助开发者了解请求在整个系统中的流转过程&#xff0c;这对于调试、监控和故障排查至关重要。Spring Boot应用通常作为微服…

【cmd】Windows CMD命令整理及示例使用

1. dir 显示目录中的文件和子目录列表。 dir带参数使用示例&#xff1a; dir /p # 分页显示目录中的内容 dir /s # 显示指定目录及所有子目录中的文件 dir /a # 显示具有隐藏属性的文件2. copy 复制文件和目录。 copy source destination带参数使用示例&#xff1a; c…

养宠浮毛异味双困扰?性价比高的宠物空气净化器推荐

家里养了两只银渐层&#xff0c;谁懂啊&#xff01;一下班打开家门就看到家里飘满了猫浮毛雪&#xff0c;空气中还传来隐隐约约的异味。每天不是在吸毛的路上&#xff0c;就是在洗猫砂盆的路上&#xff0c;而且空气中的浮毛还很难清理干净&#xff0c;这是最让人头疼的问题。 …

SSM学习8:SpringMVC请求与响应

设置请求映射路径 设置配置 config/ServletContainersInitConfig.class public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {protected Class<?>[] getServletConfigClasses() {return new Class[]{SpringMvcC…

Golang | Leetcode Golang题解之第282题给表达式添加运算符

题目&#xff1a; 题解&#xff1a; func addOperators(num string, target int) (ans []string) {n : len(num)var backtrack func(expr []byte, i, res, mul int)backtrack func(expr []byte, i, res, mul int) {if i n {if res target {ans append(ans, string(expr))}…

stm32——lcd液晶显示

一.液晶屏介绍 液晶显示屏是由液晶显示面板&#xff0c;电容触摸屏&#xff0c;pcb底板构成。在液晶显示屏里我们有带控制芯片的还有不带控制芯片的。对于低端的微控制器它不能直接控制液晶面板&#xff0c;所以需要给液晶控制面板而外增加一个液晶控制芯片。对于单片机stm32f4…

销售分析,奥威BI,销售好帮手

【销售分析&#xff0c;奥威BI&#xff0c;销售好帮手】 在商海浮沉中&#xff0c;销售数据是企业最宝贵的资产之一&#xff0c;它不仅反映了市场的反馈&#xff0c;更是指引企业未来战略方向的灯塔。奥威BI&#xff08;Business Intelligence&#xff09;&#xff0c;作为数据…

openssl req 详解

一、openssl req 该命令用于创建和处理PKCS#10格式的证书请求&#xff08;certificate requests CSRs&#xff09;&#xff0c;也可以用来创建自签名证书&#xff08; self-signed certificates&#xff09;来当作根证书&#xff08;root CAs&#xff09;使用 -new 该选项用来…

硅纪元视角 | Stability AI推出Stable Video 4D,40秒生成8角度动态视频!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…