java实现一个kmp算法
1、什么是KMP算法
Kmp 算法是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,改进字符串匹配的算法;
Kmp 算法的核心是利用匹配失败的信息,尽量减少模式串与主串的匹配次数,以达到
快速匹配的目的;
Kmp 算法的时间复杂度是O(m+n),m=模式串的长度,n=主字符串的长度
2、示例代码
/*** Kmp算法练习1:* 1、什么是Kmp算法?* Kmp 算法是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,改进字符串匹配的算法;* Kmp 算法的核心是利用匹配失败的信息,尽量减少模式串与主串的匹配次数,以达到快速匹配的目的;* Kmp 算法的时间复杂度是O(m+n),m=模式串的长度,n=主字符串的长度***/
public class KMPDemo01 {/**** @param str 主字符串* @param p 要查找的字符串,即模式串* @return*/public int kmp(String str,String p){if(str == null || "".equals(str.trim()) || p == null || "".equals(p.trim())){return -1;}int[] next = new int[p.length()];int i=0,j=0;/*** 1、计算模式串的next数组*/next(next,p);/*** 匹配过程*/while (i<str.length() && j<p.length()){//当主字符串与模式串的字符匹配时,主字符串坐标i和模式字符串坐标j同时增加//否则,模式字符串坐标j回溯if(j == -1 || str.charAt(i) == p.charAt(j)){i++;j++;}else {/*** j 回退,返回上一个满足条件的位置*/j = next[j];}}if((i - p.length()) >= 0){return i - p.length();}return -1;}/*** next数组的计算* 数组 next 保存每次遇到字符不一样的上一个的位置* 对于模式串p的每个位置j,next[j]表示p[0,j-1]的最长相等前后缀子串的长度** @param next* @param p*/private void next(int[] next,String p){int j = 0;int k = -1;next[0] = -1;while (j< p.length() - 1){if(k == -1 || p.charAt(k) == p.charAt(j)){k++;j++;if(p.indexOf(k) == p.indexOf(j)){next[j] = next[k];}else {next[j] = k;}}else {/*** k回退,获取上一步的k*/k = next[k];}}}public static void main(String[] args) {KMPDemo01 kmp = new KMPDemo01();String str = "12324abc567";String p = "ab";int index = kmp.kmp(str,p);System.out.println(" ****** index ****** "+index);}}
相关文章:
java实现一个kmp算法
1、什么是KMP算法 Kmp 算法是由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,改进字符串匹配的算法; Kmp 算法的核心是利用匹配失败的信息,尽量减少模式串与主串的匹配次数,以达到 快速匹配的目的; Kmp 算法的时…...
强化学习方法分类详解
强化学习方法分类详解 引言 强化学习(Reinforcement Learning, RL)是一种通过智能体与环境互动来学习如何做出最佳决策的方法。根据不同的优化中心、策略特性、环境模型、奖励函数、动作空间类型以及行为策略和目标策略的一致性,RL可以分为…...
雅思真题短语(二十八)
真题短语收录在合辑。 541法律官员 work as a solicitor 542前卫 a radical and expensive scheme 543反对者们 objectors 544破坏 demolishing buildings 545蒸汽机车 steam locomotives 546冷凝 steam could be condensed 547烟雾 smoke and fumes 548通风井 ventilation sh…...
在Linux系统中使用字符图案和VNC运行Qt Widgets程序
大部分服务器并没有GUI,运行的是基础的Linux系统,甚至是容器。如果我们需要在这些系统中运行带有GUI功能的Qt程序,一般情况下就会报错,比如: $ ./collidingmice qt.qpa.xcb: could not connect to display qt.qpa.plu…...
Python基于EasyOCR进行路灯控制箱图像文本识别项目实战
说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着城市化进程的加快,智能城市建设成为了现代社会发展的重要方向。路灯作为城市基础设…...
Github 2024-12-28 Rust开源项目日报 Top10
根据Github Trendings的统计,今日(2024-12-28统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10TypeScript项目1Python项目1egui: 一个简单、快速且高度可移植的 Rust GUI 库 创建周期:1903 天开发语言:Rust协议类型:Apache Li…...
提升生产力工具
VSCODE插件 干货:用好这13款VSCode插件,工作效率提升10倍 - 程序员柠檬 - 博客园 Sourcetrail Sourcetrail 是一个开源且免费的源码阅读工具,以其强大的代码导航、可视化及跨平台支持特性,成为开发者理解复杂代码库的得力助手。…...
【蓝桥杯——物联网设计与开发】系列前言
前言 本系列博客是博主为准备2024年第十五届蓝桥杯大赛物联网设计与开发赛道而写,经过4个月学习备战,最终获得全国一等奖。 从第十六届蓝桥杯大赛开始,物联网赛道更换竞赛实训平台。之前的博客,可以借鉴代码思想,但引脚…...
【Java基础】02.Java数据类型
目录 Java 数据类型 3.1 java程序中 “” 号的使用 3.2 java中的数据类型 3.2.1 基本数据类型:数值型 (1)整数类型 (2)浮点(小数)类型 3.2.2 基本数据类型:字符型 3.2.3 基本…...
Python爬虫(一)- Requests 安装与基本使用教程
文章目录 前言一、简介及安装1. 简介2. 安装 Requests2.1 安装2.2 检查安装是否成功 二、使用 Requests 发送 HTTP 请求1. 发送 GET 请求2. 发送 POST 请求3. 发送 PUT 请求4. 发送 DELETE 请求5. 发送 HEAD 请求6. 发送 OPTIONS 请求 三、传递参数1. GET 请求传递 URL 参数1.1…...
线段树保姆级教程
买水果 Description 水果姐今天心情不错,来到了水果街。 水果街有n家水果店,呈直线结构,编号为1~n,每家店能买水果也能卖水果,并且同一家店卖与买的价格一样。 学过oi的水果姐迅速发现了一个赚钱的方法:…...
logback之自定义过滤器
logback有两种过滤器,一种是context中的过滤器叫TurboFilter,是一个全局的过滤器,会影响所有的日志记录。另一种是Appender中的过滤器,只对所在的append有效。两者大同小异,这里我们以Appender的过滤器为例。 &#x…...
如何用CSS3创建圆角矩形并居中显示?
在网页设计中,圆角矩形因其美观和现代感而被广泛使用,居中显示元素也是一个常见的需求。今天,我们将学习如何使用CSS3的border-radius属性来创建圆角矩形,并将其居中显示在页面上。 如果你正在学习CSS,那么这个实例将非…...
Java 开发中的指定外部 Jar 路径详解
哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互…...
python爬虫--小白篇【selenium自动爬取文件】
一、问题描述 在学习或工作中需要爬取文件资源时,由于文件数量太多,手动单个下载文件效率低,操作麻烦,采用selenium框架自动爬取文件数据是不二选择。如需要爬取下面网站中包含的全部pdf文件,并将其转为Markdown格式。…...
TI毫米波雷达原始数据解析之Lane数据交换
TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…...
overscroll-behavior-解决H5在ios上过度滚动的默认行为
1. 问题 开发H5的过程中,经常会有android和ios两边系统需要兼容的情况。在ios上一直有个问题是当H5内容触及到页面顶部或底部时,还是可以被人为的往下或往下拉动界面。当然可能有的情况是比较适用的,比如你往下拉动,然后在导航栏…...
Nacos配置中心总结
Nacos配置中心总结 Nacos配置文件的加载顺序和优先级 加载顺序 nacos作为配置中心时,需要在bootstrap.yml文件中添加nacos config相关的配置,这样系统启动时就能先去拉取nacos server上的配置了。拉取过来后会和本地配置文件进行合并。 bootstrap.ym…...
rouyi(前后端分离版本)配置
从gitee上下载,复制下载地址,到 点击Clone,下载完成, 先运行后端,在运行前端 运行后端: 1.配置数据库,在Navicat软件中,连接->mysql->名字自己起(rouyi-vue-blog),用户名roo…...
超大规模分类(一):噪声对比估计(Noise Contrastive Estimation, NCE)
NCE损失对应的论文为《A fast and simple algorithm for training neural probabilistic language models》,发表于2012年的ICML会议。 背景 在2012年,语言模型一般采用n-gram的方法,统计单词/上下文间的共现关系,比神经概率语言…...
飞机喷涂废气治理厂家丨一场看不见的“废气治理战”如何打响?
你有没有注意过,当你透过舷窗望向停机坪时,那些静静停靠的飞机,机身光洁如镜,涂装色彩鲜明?一架飞机交付使用,到每隔数年的定期大修,飞机都需要经历复杂的喷涂过程。这层看似简单的“外衣”&…...
Windows 11上保姆级教程:用Ollama本地部署DeepSeek-R1 8B,再也不用担心API费用和网络延迟了
Windows 11本地AI部署实战:OllamaDeepSeek-R1 8B全流程指南 在AI技术快速发展的今天,越来越多的开发者和中小企业开始关注如何在本地环境中部署和运行大型语言模型。对于预算有限但对数据隐私有高要求的团队来说,本地部署不仅能显著降低成本&…...
收藏备用|小白/程序员必看!Agentic AI时代,手把手教你构建高效可靠AI Agent
在Agentic AI飞速迭代的当下,AI Agent已成为大模型落地的核心载体,不少小白程序员和入行开发者都想抓住这一风口,但常常陷入“不知从何下手”的困境。本文将从实操角度,详细拆解构建可靠高效AI Agent应用的全流程,核心…...
OpenClaw配置备份:Kimi-VL-A3B-Thinking模型参数迁移技巧
OpenClaw配置备份:Kimi-VL-A3B-Thinking模型参数迁移技巧 1. 为什么需要备份OpenClaw配置? 上周我的主力开发机突然硬盘故障,导致所有数据丢失。最让我痛心的不是代码——它们都有Git托管,而是花了两周精心调校的OpenClaw工作环…...
SEO_避开常见误区,正确理解SEO的核心价值(127 )
SEO的核心价值:避开常见误区,正确理解 在当今互联网时代,SEO(搜索引擎优化)无疑是提升网站流量、吸引潜在客户的重要手段。许多企业在SEO实践中常常陷入一些误区,无法正确理解SEO的核心价值,导…...
重新定义CAD文件格式解析:LibreDWG如何打破专有格式的技术垄断
重新定义CAD文件格式解析:LibreDWG如何打破专有格式的技术垄断 【免费下载链接】libredwg Official mirror of libredwg. With CI hooks and nightly releases. PRs ok 项目地址: https://gitcode.com/gh_mirrors/li/libredwg 在工程设计和建筑行业的数字化转…...
AI Agent自我进化底层教程(非常详细),收藏这一篇就够了!
一句话讲清楚👉🏻 MemSkill通过可学习和演进的"记忆技能"系统,让AI Agent能够动态选择和优化记忆操作,实现真正的自我进化。 背景:AI Agent的记忆困境 2026年,AI Agent已经成为人工智能领域最热…...
YouTube面临儿童AI内容监管挑战
专家呼吁YouTube停止向儿童推荐AI视频近日,超200名儿童发展专家及相关机构联名致信谷歌和YouTube高层,强烈要求YouTube及YouTube Kids停止向未成年用户展示或推荐AI生成视频。这些专家指出,大量所谓有“教育用途”的AI视频其实内容空洞、质量…...
LeetCode138. 随机链表的复制(2024秋季每日一题 34)
给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 ne…...
训练自定义游戏,构建Gymnasium训练环境
认识Gymnasium使用stable_baseline3只需要定义好Gymnasium环境,关注训练的奖励机制,将重点放在业务的开发上而不是复杂的算法。Gymnasium提供了几个核心的api:方法功能返回值reset()将环境重置为初始状态,开始新回合。obs, infost…...
