数据结构与算法之KMP算法


目录

  1. KMP算法介绍
  2. 输入字符串str1,str2,返回字符串str2是否在str1中,在的话在第几位开始

1. KMP算法介绍

在CSDN上看到一篇写的很好的关于KMP的介绍,附上链接:https://www.cnblogs.com/SYCstudio/p/7194315.html


2. 输入字符串str1,str2,返回字符串str2是否在str1中,在的话在第几位开始

  1. 因为上面那篇博客说的很详细了,我直接贴代码

  2. 代码实现


public class Code_01_KMP {public static int getIndexOf(String s, String m) {if (s == null || m == null || m.length() < 1 || s.length() < m.length()) {return -1;}char[] str1 = s.toCharArray();char[] str2 = m.toCharArray();int i1 = 0;int i2 = 0;int[] next = getNextArray(str2);while (i1 < str1.length && i2 < str2.length) {if (str1[i1] == str2[i2]) {i1++;i2++;} else if (next[i2] == -1) { //i1指向的字符和str2的第一个字符都不匹配,那么i1后移一个继续比较i1++;} else { //否则指向前一个最长前缀继续比较i2 = next[i2];}}return i2 == str2.length ? i1 - i2 : -1;}public static int[] getNextArray(char[] str2) {if (str2.length == 1) {return new int[]{-1};}int[] next = new int[str2.length];next[0] = -1;next[1] = 0;int cn = 0;int i = 2;while (i < str2.length) {if (str2[i - 1] == str2[cn]) {next[i++] = ++cn;} else if (cn > 0) {cn = next[cn];} else {next[i++] = 0;}}return next;}public static void main(String[] args) {String str = "abcabcababaccc";String match = "ababa";System.out.println(getIndexOf(str, match));}}

数据结构与算法之KMP算法相关推荐

  1. 【数据结构】字符串 模式匹配算法的理解与实现 Brute Force算法(BF算法)与KMP算法 (C与C++分别实现)

    #笔记整理 若不了解串的定义,可至: 串(string)的定义与表示 查看 串的模式匹配算法 求子串位置的定位函数 Index(S, P, pos) 求子串的定位操作通常称作串的模式匹配(其中子串P称 ...

  2. 【数据结构】详解KMP算法

    字符串匹配算法:简单来说就是给你一个主串和一个子串,让你查找子串在主串中的位置,找到返回下标. 常见的两种算法:BF算法.KMP算法 这两种算法是怎样的思路呢,我们接着往下看: 目录 BF算法(暴力算 ...

  3. 《数据结构》实验报告四:串的模式匹配(BF算法、KMP算法)

    一.实验目的 1.了解串的基本概念. 2.掌握串的模式匹配算法的实现 . 二.实验预习 说明以下概念 1.模式匹配: 串的模式匹配就是子串的定位运算. 设有两个字符串 S 和 T ,S为主串(正文串) ...

  4. 图解算法:KMP算法

    目录 第一章 暴力匹配实现 第二章 KMP算法介绍 第三章 KMP算法原理 第四章 KMP的匹配表 第五章 KMP算法实现 项目地址:https://gitee.com/caochenlei/algo ...

  5. 【C语言】算法学习·KMP算法

    KMP算法(全称Knuth-Morris-Pratt字符串查找算法,由三位发明者的姓氏命名)是可以在文本串s中快速查找模式串p的一种算法. 要想知道KMP算法是如何减少字符串查找的时间复杂度的,我们不 ...

  6. 数据结构 4 字符匹配-KMP算法

    第四章主要介绍的是串,但是串的实现没什么必要,最重要的知识点在于KMP算法的使用,大二时数据结构总结过一次KMP算法,大二时总结的比较细致,链接如下: https://blog.csdn.net/we ...

  7. 数据结构与算法(5)字符串(BF算法、KMP算法及KMP算法优化)

    目录 一.BF算法(暴力算法) 二.KMP算法 三.KMP算法优化 一.BF算法(暴力算法) 一个一个往后匹配,匹配失败继续从母串下一个和头(子串的头)往后继续匹配. 虽然简单,但是需要较多的时间复杂 ...

  8. 数据结构与算法之KMP算法02

    2019独角兽企业重金招聘Python工程师标准>>> 一.KMP算法思路启发2       1.深入探讨算法思路 这次我们给模式匹配串添加一个K数组(也就是KMP算法中非著名的ne ...

  9. 数据结构:详解KMP算法,手工求解next、nextval数组,求模式串的比较次数例题

    KMP 算法 手工求解 next 数组,nextval数组 例题:求模式串的比较次数 2019 年 408 统考真题 设主串 T="abaabaabcabaabc",模式串 S=& ...

最新文章

  1. java项目经理也就那么回事_网易PM | 我们之前在需求评审环节踩过的坑...
  2. jdk7 for Mac
  3. JVM在JDK1.8的变化
  4. Eclipse GBK批量转UTF-8插件(转)
  5. Win11如何跳过开机更新 Win11跳过开机更新教程
  6. 批量 材质 调整_寒霜引擎的PBR实践3.0(一)材质篇
  7. 10 行代码玩转弹性调度的小把戏
  8. 大数据技术主要应用在哪些行业
  9. select设置高度的兼容问题
  10. IntelliJ IDEA中创建jsp项目
  11. 使用keeplive处理socket网络异常断开
  12. mac 连接android手机调试,mac连接华为手机,无法真机调试。
  13. 【论文阅读】Conversational Memory Networkfor Emotion Recognition in Dyadic Dialogue Videos
  14. C语言希冀平台作业-南京晓庄
  15. D3临摹作业_分词与词云可视化(西安交大国家艺术基金数据可视化培训第28天)
  16. 免费的PHP在线解密工具源码
  17. lesson1-breeds
  18. 丁酉新年假期江门,甘孜旅行手记
  19. 代码强力对比,就用这7个工具!
  20. 食君之禄 忠君之事 奈何哉!

热门文章

  1. Linux打tar包排除目录中的某个目录
  2. Linux命令行上执行操作,不退回命令行的解决方法
  3. 用Matlab与c++程序生成的数据文件绘制sin函数
  4. 浅说动态生成Class实现MVC
  5. 中国互联网哪来的所谓“所谓”的创新?“狗日”的腾讯究竟动了谁的蛋糕?...
  6. CodeForces - 1484F Useful Edges(最短路)
  7. CodeForces - 1263A Sweet Problem(思维,水题)
  8. CodeForces - 432D Prefixes and Suffixes(KMP的next数组性质)
  9. CodeForces - 363D Renting Bikes(二分+贪心)
  10. android libc 有哪些函数_35K成功入职:腾讯视频面试Android经历!「含面试题+答案」...