package com.trs.utils;public class KMPStr {/** 在KMP算法中,最难求的就是next函数,如何理解next函数是一个难题,特别是k=next[k],这里* 需要指出的是当p[i]!=p[j]时,我们只有通过回溯将k的值逐渐减小,貌似类似与用到了动态规划的思想 参考网上阮一峰老师的博客讲解的十分详细*/private static int[] getNext(String t) {int[] next = new int[t.length()];next[0] = -1;int j = 0;int k = -1;while (j < t.length() - 1) {if (k == -1 || t.charAt(j) == t.charAt(k)) {j++;k++;next[j] = k;} else {k = next[k];}}for (int i : next) {System.out.print(i + ":");}System.out.println();return next;}public static int kmpStrIndex(String s, String t, int[] next) {int i = 0;int j = 0;while (i < s.length() && j < t.length()) {if (j == -1 || s.charAt(i) == t.charAt(j)) {i++;j++;} else {// i不变,j后退j = next[j];}if (j == t.length()) {return i - j;}}return -1;}}

View Code

转载于:https://www.cnblogs.com/peizhe123/p/4875107.html

KMP算法的java实现相关推荐

  1. kmp java_KMP算法的JAVA实现

    什么是KMP算法 Knuth-Morris-Pratt算法(简称KMP)是常用的字符串匹配算法之一. 假设现在有一个模式串a="ABACABAD"和一个主串b="BBC ...

  2. 详解KMP算法原理,以及完整java与C++实现

    点击此处学习更多算法与通信知识 作者 | labuladong 来源 | labuladong KMP 算法(Knuth-Morris-Pratt 算法)是一个著名的字符串匹配算法,效率很高,但是确实 ...

  3. 经典KMP算法C++与Java实现代码

    前言: KMP算法是一种字符串匹配算法,由Knuth,Morris和Pratt同时发现(简称KMP算法).KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的.比 ...

  4. KMP算法中next数组的理解与算法的实现(java语言)

    KMP 算法我们有写好的函数帮我们计算 Next 数组的值和 Nextval 数组的值,但是如果是考试,那就只能自己来手算这两个数组了,这里分享一下我的计算方法吧. 计算前缀 Next[i] 的值: ...

  5. Java 字符串匹配的KMP算法

    package Four;import java.util.Scanner;/**** 字符型的kmp算法* @author bai* 描述:* 给你一个文本串,再给你一个模式串,* 文本串中有多少个 ...

  6. Java数字匹配的kmp算法

    package Four; /**** 研究kmp算法(数字之间的匹配模式)* @author bai* 题目描述:给你两个数字序列,你的任务是在序列a中* 找到和序列b完全匹配的子串,如果有多个匹配 ...

  7. 【Java数据结构与算法】第十八章 动态规划和KMP算法

    第十八章 动态规划和KMP算法 文章目录 第十八章 动态规划和KMP算法 一.动态规划 1.介绍 1.爬楼问题 2.扔鸡蛋问题 3.背包问题 二.KMP算法 1.引入 2.介绍 2.代码实现 一.动态 ...

  8. java实现kmp_java 实现KMP算法

    KMP算法是一种神奇的字符串匹配算法,在对 超长字符串 进行模板匹配的时候比暴力匹配法的效率会高不少.接下来我们从思路入手理解KMP算法. 在对字符串进行匹配的时候我们最容易想到的就是一个个匹配,类似 ...

  9. 字符串匹配算法(KMP算法JAVA版)

    目录 暴力匹配 KMP算法 暴力匹配 暴力算法就是 普通模式的匹配算法 bf算法就是将目标的字符串 的第一个字符与模式的第一个字符进行匹配,相等的话就继续比较第二个字符是否是匹配的,依次进行下去,如果 ...

最新文章

  1. 未来智能实验室成立,建设世界第一个智能系统智商评测和趋势研究机构
  2. ZeroCopyLiteralByteString cannot access superclass
  3. ${oid?c}的使用
  4. sum怎么用python_python sum()函数和.sum(axis=0)函数的使用
  5. 《剑指Offer》 二叉树的镜像
  6. 【按位dp】文盲的学习方法
  7. 升级无法登录_JeeSite v4.2.2 发布,代码生成增强、Boot 2.3、短信登录、性能提升...
  8. 【Kafka】Kafka BrokerEndPointNotAvailableException: End point with security protocol PLAINTEXT not
  9. axios get 跨域_axios网络交互应用-Vue
  10. 我一个理科生造的AI,怎么就去做历史高考题了呢?
  11. English trip M1 - AC9 Nosey people 爱管闲事的人 Teacher:Solo
  12. 2.SRE:Google运维解密 --- Google 生产环境:SRE 视角
  13. java程序设计中科院_中科院NLPIR中文分词java版
  14. iOS 中client和server的 Web Service 网络通信 (2)
  15. API安全风险与防范
  16. 【BurpSuite学习篇】四:Scanner 漏洞扫描模块
  17. DayDream模拟手柄操作
  18. 2021年全球壳聚糖收入大约93百万美元,预计2028年达到126.8百万美元
  19. html实现名字滚动年会抽奖(附源码)
  20. spring jsm(一)

热门文章

  1. javascript中构造函数的说明
  2. Oracle ORA-07445 [evaopn3()+384] 错误 分析
  3. ASP.NET MVC+LINQ开发一个图书销售站点(9):编辑目录
  4. fixed 语句(C# 参考)
  5. PgSql备份pg_dump与还原手记pg_restore(转)
  6. 用RAII技术管理资源及其泛型实现
  7. arachni web mysql数据库_Web安全扫描工具Arachni
  8. java map 最大值_MAP集合选出最大值
  9. matlab自定义窗口名
  10. python如果选择不在列表里_Python-list.remove(x)x不在列表中