阿三哥的YouTube频道

来自阿三哥Github上的源码

package com.interview.string;/*** Date 09/22/2014* @author tusroy* * Do pattern matching using KMP algorithm* * Runtime complexity - O(m + n) where m is length of text and n is length of pattern* Space complexity - O(n)*/
public class SubstringSearch {/*** Slow method of pattern matching*/public boolean hasSubstring(char[] text, char[] pattern){int i=0;int j=0;int k = 0;while(i < text.length && j < pattern.length){if(text[i] == pattern[j]){i++;j++;}else{j=0;k++;i = k;}}if(j == pattern.length){return true;}return false;}/*** Compute temporary array to maintain size of suffix which is same as prefix* Time/space complexity is O(size of pattern)*/private int[] computeTemporaryArray(char pattern[]){int [] lps = new int[pattern.length];int index =0;for(int i=1; i < pattern.length;){if(pattern[i] == pattern[index]){lps[i] = index + 1;index++;i++;}else{if(index != 0){index = lps[index-1];}else{lps[i] =0;i++;}}}return lps;}/*** KMP algorithm of pattern matching.*/public boolean KMP(char []text, char []pattern){int lps[] = computeTemporaryArray(pattern);int i=0;int j=0;while(i < text.length && j < pattern.length){if(text[i] == pattern[j]){i++;j++;}else{if(j!=0){j = lps[j-1];}else{i++;}}}if(j == pattern.length){return true;}return false;}public static void main(String args[]){String str = "abcxabcdabcdabcy";String subString = "abcdabcy";SubstringSearch ss = new SubstringSearch();boolean result = ss.KMP(str.toCharArray(), subString.toCharArray());System.out.print(result);}
}

油管最火KMP算法讲解,阿三哥的源代码!相关推荐

  1. 可能是全网最清晰的KMP算法讲解

    字符串匹配 "字符串A是否为字符串B的子串?如果是,出现在B的什么位置?"这个问题就是字符串匹配问题.字符串A称为模式串,字符串B称为主串. 那么,如何查找模式串在主串中的位置呢? ...

  2. 2020年最全最简单KMP算法讲解

    目录 1.KMP算法的来源 2.最大公共前后缀 3.KMP算法原理 4.next数组 5.next数组值的确定 6.KMP算法的缺陷 7.KMP算法的改进 1.KMP算法的来源 其实博主刚看KMP算法 ...

  3. matrix67 kmp算法讲解

    原文链接:http://www.matrix67.com/blog/archives/115 KMP算法详解 如果机房马上要关门了,或者你急着要和MM约会,请直接跳到第六个自然段. 我们这里说的KMP ...

  4. KMP算法讲解(next数组求解)

    KMP算法 关于算法部分,网上有比较多写的好的博客了,下面是我看到的一篇.https://blog.csdn.net/liu88010988/article/details/50789960 这种算法 ...

  5. 字符串匹配KMP算法讲解

    KMP算法 引子 假设我们解决这样一个问题: 有字符串S与模式串P,想知道模式串P在字符串S的什么位置,应如何解决? 解决子串匹配问题 字符串S:"abcabcabd" 模式串P: ...

  6. 动漫:史上最简(详细)KMP算法讲解,看不懂算我输!

    刚关注阿广的朋友们可能不太了解我 我也做个自我介绍 不客气的讲 通过下面的小细节 你也可能体会到阿广一个什么样的人了 (以上为凑字数够300字发原创) 所以公共前后缀的条件为: 1.最长的前后缀 2. ...

  7. KMP算法详细讲解(看完不会请打我)

    文章目录 前言 一:情景导入-如何快速在一个主串找到目标字符串 二:详解KMP (1)暴力匹配的缺点 (2)最长相同前缀和后缀 (3)究竟怎么回溯 (3)next数组 (4)求解next数组 A:ne ...

  8. 【原创】KMP算法详解

    前言 KMP算法是学习数据结构 中的一大难点,不是说它有多难,而是它这个东西真的很难理解(反正我是这么感觉的,这两天我一直在研究KMP算法,总算感觉比较理解了这套算法, 在这里我将自己的思路分享给大家 ...

  9. 数据结构——KMP算法(难懂版,但还是看看吧)

    据说这个算法很难,起初看了<大话数据结构>,知道了这个算法,但是没看懂没理解,然后看其他博客,尽管博客上写着易懂,好理解,但我仍然看不懂,不理解,心里一直在口吐芬芳. 后来我看了几个版本的 ...

最新文章

  1. 成为顶级CIO ,应该怎么做?
  2. codeforces 734A-C语言解题报告
  3. C++/C--lambda表达式与函数对象【转载】
  4. 宇视摄像头ip搜索软件下载_搜索资源?下载资源?一款软件就给你安排的妥妥的...
  5. 如何改变php的语言变中文,yii2怎么设置切换语言
  6. 二叉树的创建_【数据结构用python描述】python创建二叉树
  7. Struts Tiles 页面模板引擎初实践
  8. 【数位dp】HDU3555:Bomb(入门题目)
  9. BAT文件中如何注释
  10. 【弱电综合课程设计】三菱PLC经步进驱动器控制步进电机调速和正反转(硬件连接+梯形图)
  11. 马克思主义原理 - 圣才思维导图
  12. Linux Ubantu 关于vi中上下左右键和Backspace键无法使用解决
  13. 论文品读:Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures
  14. TP4056 充电电路学习借鉴
  15. 做好演讲者的必备条件
  16. Promise在各种场景的使用(Promise.all、Promise.allSettled、Promise.race、Promise.any)
  17. jpg怎么合成一份_如何将多张JPG图片合并成一个GIF?
  18. linux服务器重启原因排查_Linux自动重启排查
  19. 教育期刊《语文教学通讯》杂志简介及投稿须知
  20. 三节课产品经理P1 学习总结

热门文章

  1. 音频信号的基波、谐波
  2. 【Web】Excle题库抽题组卷在jsp显示
  3. python gpu加速库比matlab快吗_Python之Unittest和Requests库详解
  4. 极验:验证码在黑灰产对抗中的角色和实践
  5. Java3d获取坐标_java-使用带有xzyz坐标和jzy3d的3d表面图
  6. 用python把图片换成蓝底_用python 将蓝底照片转化为白底照片
  7. 中学生应该养成的良好习惯
  8. DNS服务详解(解析+搭建)
  9. win10 获取超级管理员权限,administrator不是最高权限解决办法
  10. VMM物理内存、虚拟内存管理,偷页算法