百度的一个图文介绍http://www.sohu.com/a/336648975_453160

package Algorithm.kmp;import java.util.Arrays;public class KMPViolenceMatch {public static void main(String[] args) {String str1 = "BBC ABCDAB ABCDABCDABDE";String str2 = "ABCDABD";int [] next = kmpNext(str2);int kmpsearch = kmpsearch(str1, str2, next);System.out.println("next[] = " + Arrays.toString(next));System.out.println("index = " + kmpsearch);}public static int kmpsearch(String str1, String str2,int [] next){//遍历str1,i指向str1,j指向str2for (int i = 0, j = 0; i < str1.length(); i++) {//str1.charAt(i) != str2.charAt(j),调整j大小//回到匹配表的值相同的下一位while (j > 0 && str1.charAt(i) != str2.charAt(j)){j = next[j - 1];}if (str1.charAt(i) == str2.charAt(j)){j++;}if (j == str2.length()){return i - j + 1;}}return -1;}//获取到一个字符串(子串)的部分匹配值表public static int[]  kmpNext(String dest){//创建一个next数组保存部分匹配值int [] next = new int[dest.length()];//如果只有一个字符的话那么next[0] = 0;next[0] = 0;for (int i = 1, j = 0; i < dest.length(); i++) {//dest.charAt(i) != dest.charAt(j),我们需要从next[j-1]获取新的j//直到我们发现有dest.charAt(i) == dest.charAt(j)退出//就是回溯到与下一个匹配值相同的位置,一直没有就是回溯到j = 0while (j > 0 && dest.charAt(i) != dest.charAt(j)){j = next[j-1];}//这是dest.charAt(i) == dest.charAt(j)时//这个条件满足时,部分匹配值就+1if (dest.charAt(i) == dest.charAt(j)){j++;}next[i] = j;}return next;}}

算法 - KMP算法(字符串匹配)相关推荐

  1. 算法之路,带你轻松学废算法系列之字符串匹配(中)

    文章目录 字符串匹配中 前言 KMP算法 KMP算法的基本原理 失效函数计算方法 问题解答 KMP 算法复杂度分析 小结 Trie树 什么是Trie树 如何实现一棵 Trie 树? Trie树的构造 ...

  2. 算法 - KMP算法原理顿悟有感

    算法 - KMP算法原理顿悟有感 KMP? KMP核心思想 举个栗子 上点代码 next数组 (1)若P~j~ == P~t~ (2) 若P~j~ 和 P~t~不相等 改进上面的KMP算法 nextv ...

  3. 模式匹配(Java)——烤馍片算法(KMP算法)

    模式匹配(Java) 模式匹配 模式匹配是数据结构中字符串的一种基本运算. 由于字符串我们学习过了,大部分操作都比较清楚,但是模式匹配相对来说操作稍微有些难度,所以我们在这里简单的进行讲述. 模式匹配 ...

  4. 字符串匹配算法(BF算法KMP算法)

    字符串匹配算法 暴力匹配(BF)算法 KMP算法 next数组 求next数组的练习 next数组的优化(nextval数组) 练习 暴力匹配(BF)算法 BF算法,即暴力(Brute Force)算 ...

  5. 字符串算法之KMP(字符串匹配)

    一.背景   给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题.   Knuth-Morris-Pratt 算法(简称 KMP)是解决这一 ...

  6. KMP算法(求解字符串匹配)

    提示:可搭配B站比特大博哥视频学习:传送门 (点击) 目录 前言 图解 代码 前言 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们 ...

  7. 【数据结构与算法】【字符串匹配】Trie树

    单模式串匹配 BF 算法和 RK 算法 BM 算法和 KMP 算法 多模式串匹配算法 Trie 树和 AC 自动机 一. 什么是"Trie树"? 1. 他是一种树形结构,是一种专门 ...

  8. 算法之路,带你轻松学废算法系列之字符串匹配(下)

    文章目录 字符串匹配下 前言 引入 多模式串匹配算法:AC 自动机 AC自动机过滤敏感词 时间复杂度分析 小结 结尾 字符串匹配下 前言 大家好,我是魏果果哦,算法呢,是我们程序员一生无法避免的垫脚石 ...

  9. 字符串匹配rk算法c语言,字符串匹配问题(BFRK算法)

    1. 题目 有一个主串S={a,b,c,a,c,a,b,d,c},模式串T={a,b,d},请找出模式串在主串中第一次出现的位置 提示:不需要考虑字符串大小写问题,字符均为小写字母 2. BF算法 B ...

  10. 详解图示+例题演练——BF算法+KMP算法基本原理

    KMP算法一直让我们又爱又恨,难以理解却又效率很高. 看了看网上的KMP教程,无论是博客还是视频,大多以文字和逻辑推导的方式呈现,纷繁复杂,晦涩难懂.这会让我们在初学时多走很多弯路. 人类接受知识最直 ...

最新文章

  1. (0066)iOS开发之UITableViewCell上子控件通过superView找对应的cell的探究
  2. 找出1到N中缺少的數?
  3. 李沐分享斯坦福2021秋季新课:实用机器学习
  4. 初步认识泊松重建(比较全的综合教程)
  5. vs2008 MFC类继承结构
  6. paip.hadoop的应用研究总结
  7. BiliBili后台源码45MB全部泄露,中奖概率写在注释里,密码硬编码,看懂了你就欧气满满(提供下载)!
  8. win10如何删除用户计算机账户,Win10系统如何利用命令删除用户账户?
  9. 自定义控件:Flag标签
  10. 纯HTML+js实现鼠标滚轮动态调整缩放图片大小
  11. Docker 构建统一的前端开发环境
  12. 【错误记录】python不常用的一个小操作:安装pip
  13. 自建公众号服务器开发教程,01-微信公众号开发入门篇
  14. 电影《海贼王:红发歌姬》观后感
  15. C/C++ 光标:键盘上下键实现菜单移动
  16. 转载收藏 常用数学符号的读法及其含义
  17. 题解-打印空心六边形
  18. 鸿蒙系统真实评测,华为鸿蒙系统对比安卓系统评测
  19. 如何学好游戏3D引擎编程
  20. Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素

热门文章

  1. PHP的pm、pm.max_requests、memory_limit
  2. LeetCode-Scramble String
  3. 请问 CType和DirectCast函数有何区别
  4. [剑指offer]面试题第[54]题[JAVA][二叉搜索树的第k大节点][递归][迭代]
  5. [Leedcode][JAVA][第680题][验证回文字符串Ⅱ][贪心][递归]
  6. iview 可以选择当天 禁用_人脸识别刚要普及,怎么就被禁用了?|人脸识别|人脸信息|世超|rekognition...
  7. ajax时间控件,带有ajax的JQuery中的插件datetimepicker出错
  8. xml生成2维码_MyBatis(2)之MyBatis-Generator最佳实践
  9. python字符串的方法和列表的方法_Python学习笔记字符串操作之join()和split()方法,列表转字符串,字符串转列表...
  10. base64 转文件_PHP伪协议与文件包含