当前位置: 首页 > backend >正文

KMP算法动态演示

KMP算法

1.动态演示

https://tsccg-oss.oss-cn-guangzhou.aliyuncs.com/image/KMP%E7%AE%97%E6%B3%95%E5%8A%A8%E6%80%81%E6%BC%94%E7%A4%BA.gif

2.代码实现

    @Testpublic void test5(){String parent = "ABC ABCDAB ABCDABCDABDE";String child  = "ABCDABD";List<Integer> result = kmpSearch(parent, child);System.out.println(result);}// 生成部分匹配表(前缀函数)private static int[] computeLPSArray(String pattern) {int[] next = new int[pattern.length()];int length = 0; // 记录前一个最长前缀后缀的长度int i = 1;// 第一个字符的部分匹配值为0next[0] = 0; // 计算next数组while (i < pattern.length()) {char a = pattern.charAt(i);char b = pattern.charAt(length);if (a == b) {length++;next[i] = length;i++;} else {if (length != 0) {length = next[length - 1]; // 回退到上一个长度} else {next[i] = 0;i++;}}}return next;}// KMP搜索算法public static List<Integer> kmpSearch(String parentStr, String childStr) {List<Integer> result = new ArrayList<>();int parentStrLen = parentStr.length();int childStrLen = childStr.length();// 创建next数组,用于存储模式串的部分匹配值int[] next = computeLPSArray(childStr);int i = 0; // text的索引int j = 0; // pattern的索引while (i < parentStrLen) {char a = parentStr.charAt(i);char b = childStr.charAt(j);if (a == b) {i++;j++;}if (j == childStrLen) {// 找到匹配,返回起始索引result.add(i - j);j = next[j - 1]; // 继续寻找下一个匹配} else if (i < parentStrLen && childStr.charAt(j) != parentStr.charAt(i)) {// 不匹配时if (j != 0) {j = next[j - 1];} else {i++;}}}return result;}
http://www.xdnf.cn/news/117.html

相关文章:

  • CTF--各种绕过哟
  • 汽车免拆诊断案例 | 2011款雪铁龙世嘉车刮水器偶尔自动工作
  • 服务器的算力已经被被人占用了,我如何能“无缝衔接”?
  • MATLAB - 小车倒立摆的非线性模型预测控制(NMPC)
  • SAP案例:珠海汉胜科技SAP S/4 HANA智能制造实践与价值实现
  • 3.Chromium指纹浏览器开发教程之chromium119版本源码拉取
  • 4.18---缓存相关问题(操作原子性,击穿,穿透,雪崩,redis优势)
  • 第五届能源工程、新能源材料与器件国际学术会议(NEMD 2025)
  • 数据结构中的宝藏秘籍之广义表
  • Web三漏洞学习(其三:rce漏洞)
  • 【MySQL】表的操作
  • PyTorch分布式训练调试方法(跟踪调用过程)
  • 每日算法【双指针算法】(Day 2-复写零)
  • 社交媒体时代的隐私忧虑:聚焦Facebook
  • ios精灵脚本辅助软件,有根和无根roothide越狱区别
  • iOS Google登录
  • 【生态系统模型】Biome-BGC生态系统模型与Python融合技术实践应用
  • iOS Facebook 登录
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(四级)答案 + 解析
  • 基于大模型的腹股沟疝诊疗全流程风险预测与方案制定研究报告
  • 【vLLM 学习】Aqlm 示例
  • 网页端调用本地应用打开本地文件(PDF、Word、excel、PPT)
  • day31和day32图像处理OpenCV
  • 数据通信学习笔记之OSPF配置命令
  • 大数据应用开发——大数据平台集群部署
  • 数据结构——二叉树
  • GB28181的SIP注册与PS推流学习
  • 常用绑定事件方式有哪几种
  • Spring AI与通义千问的完美结合:构建智能对话应用
  • 【OSG学习笔记】Day 3: 加载你的第一个3D模型