KMP学习

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

从头到尾彻底理解KMP

字符串匹配的KMP算法

KMP算法的Next数组详解

package leetcode;import java.util.Arrays;public class ImplementStrStr {public int strStr(String haystack, String needle) {if(haystack==null||needle==null)return -1;return haystack.indexOf(needle);}public int[] getNext(String str){int []preFix=new int[str.length()];int i=0;for(i=1;i<str.length();i++){int k=preFix[i-1];while(k!=0&&str.charAt(i)!=str.charAt(k))//从已经匹配过的字符串后缀在查找最大匹配k=preFix[k-1];if(str.charAt(i)==str.charAt(k)){k++;preFix[i]=k;}else{preFix[i]=0;}}return preFix;}public int indexOf(String haystack,String needle){int heyLength=haystack.length();int needLength=needle.length();int i=0;int j=0;while(i<heyLength&&j<needLength){if(haystack.charAt(i)==needle.charAt(j)){i++;j++;}else{i=i+1-j;j=0;}}if(j==needLength){return i-j;}else{return -1;}}public int indexOf2(String haystack,String needle){int heyLength=haystack.length();int needLength=needle.length();if(needLength==0){return 0;}int i=0;int j=0;int pre[]=getNext(needle);while(i<heyLength&&j<needLength){while(j>0&&haystack.charAt(i)!=needle.charAt(j)){j = pre[j-1];}if(haystack.charAt(i)==needle.charAt(j)){j++;}i++;if(j==needLength){return i-j;}}return -1;}public int[] next(String param){int[] next=new int[param.length()];next[0]=-1;int length=param.length();int i=0;int j=-1;while(i<length-1){if(j==-1||param.charAt(i)==param.charAt(j)){next[++i]=++j;}else{j=next[j];}}return next;}public int kmp(String str,String param){if(null==str||null==param){return -1;} int[] next=next(param);int strLength=str.length();int paramLength=param.length();int i=0;int j=0;while(i<strLength&&j<paramLength){if(j==-1||str.charAt(i)==param.charAt(j)){i++;j++;}else{j=next[j];}}if(j==paramLength){return i-j;}else{return -1;}}public static void main(String[] args) {ImplementStrStr i=new ImplementStrStr();System.out.println(i.indexOf2("abc", ""));System.out.println(i.indexOf2("a", "a"));
//		System.out.println(i.indexOf2("mississippi","pi"));System.out.println(i.indexOf2("abbababbabbbabaaab","abbabbbabaa"));//System.out.println(i.kmp("abc", ""));System.out.println(i.kmp("a", "a"));
//		System.out.println(i.indexOf2("mississippi","pi"));System.out.println(i.kmp("abbababbabbbabaaab","abbabbbabaa"));System.out.println(Arrays.toString(i.getNext("issip")));}
}

转载于:https://my.oschina.net/findurl/blog/817489

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291792.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MVC应用程序实现文件库(FlexPaper)

很久之前Insus.NET在实现了《FlexPaper实现文档在线浏览》http://www.cnblogs.com/insus/archive/2011/07/21/2112369.html。 当时也只是实现了显示而已&#xff0c;也没有实现在线转换功能。现在&#xff0c;Insus.NET已经从asp.net转向了asp.net MVC应用程序开发了。因此再想…

海量数据处理面试题集锦

十七道海量数据处理面试题与Bit-map具体解释作者&#xff1a;小桥流水&#xff0c;redfox66&#xff0c;July。前言本博客内以前整理过有关海量数据处理的10道面试题&#xff08;十道海量数据处理面试题与十个方法大总结&#xff09;&#xff0c;此次除了反复了之前的10道面试题…

如何避免在迭代集合为 null 时抛出的空引用异常?

咨询区 Polaris878我在遍历集合时&#xff0c;经常会遇到集合为 null 的情况&#xff0c;比如下面这样&#xff1a;int[] returnArray Do.Something(...);拿到数组后&#xff0c;接下来我用下面的方式进行遍历。foreach (int i in returnArray) {// do some more stuff }说实话…

java之解析DNS的SRV记录

1、导入相应的jar包 导入sjava-2.1.6.jar包&#xff0c;今天上传资源有问题&#xff0c;下次传了之后再补充到这里。 2、关键代码 public static List<String> resoveSrv(String query) {// String s "ramuh.example.com"; // the inputted string, I …

c#队列取值_C# 队列

1 Queue23 usingSystem;4 usingSystem.Collections.Generic;5 usingSystem.Linq;6 usingSystem.Text;7 usingSystem.Threading;89 namespaceDataStructure10 {11 /// 12 ///队列接口13 /// 14 interface IQueue15 {16 void EnQueue(T elem); //入队列操作17 T DeQueue(); //出队…

中小企业项目的痛VS感人IT团队

早上&#xff0c;接到客户电话&#xff0c;dynamics CRM不能用了&#xff0c;此客户从开始安装程序开始二次开发期间&#xff0c;因电源问题导致服务器多次意外断电&#xff0c;至今也不加UPS电源。前几次&#xff0c;都不是很严重&#xff0c;服务器没有大量文件损坏&#xff…

java的linux执行的shell

2019独角兽企业重金招聘Python工程师标准>>> #!/bin/sh #该脚本为Linux下启动java程序的通用脚本。即可以作为开机自启动service脚本被调用&#xff0c; #也可以作为启动java程序的独立脚本来使用。 # # #警告!!!&#xff1a;该脚本stop部分使用系统kill命…

统计 Github 2021 贡献过的开源项目

统计一下 2021 贡献过的开源项目Intro新的一年的开始了&#xff0c;有很多总结和回顾还没有做&#xff0c;今天就盘点一下贡献过的开源项目吧~起初想着手动地通过 Github Dashboard 来统计但是感觉有些麻烦&#xff0c;还得一个个地复制标题链接等&#xff0c;好麻烦&#xff0…

linux c之<setjmp.h>使用总结

1、爆代码 #include<setjmp.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h>void f1(int, int, int, int); void f2(void);static jmp_buf jmpbuffer; static int globval; int i = 4; int main(void) {int autoval;register i…

Unit Three-Program test

编程练习——《C Primer Plus》 Unit Three-Program test Program_test_5 /* Program Test :一年大约有 3.15610^7秒。编写一个程序&#xff0c;提示用户输入年龄&#xff0c;然后显示该年龄对应的秒数。 */ #include<stdio.h> int main(void) {int i_age;double d…

IntentService使用

说实话&#xff0c;对于这个类在我实际工作中并没有用到过&#xff0c;通常也只是用了它的父类Service&#xff0c;通过官方文档可以看出类的层次结构: 而在今年的一次面试当中&#xff0c;有个面试官提起了它&#xff0c;所以虽说目前还没有真实在项目中用它&#xff0c;但是有…

如何使用 Barracuda 防火墙设置/保护 Azure 应用程序

&#xfeff;&#xfeff;如果某企业在 Windows Azure 上托管某个应用程序&#xff0c;该应用程序会在某个特定时间暴露到 Internet&#xff0c;以用于商业用途。公共 Internet 带来客户的同时也带来了攻击者。 Tim Omta 发表的新博客文章中介绍了如何使用 PaaS 应用程序之前的…

Git 简单命令行指令

为什么80%的码农都做不了架构师&#xff1f;>>> 这些git命令来自gitlab的简单提示&#xff0c;挺人性化&#xff0c;记录下。 Git 全局设置 git config --global user.name "yourname" git config --global user.email "yournamemail.com" 创…

python创_Python创建Windows 服务

Python 写windows 服务&#xff0c;需要使用 pywin32包。直接上代码&#xff1a;#encodingutf8Created on 2014-7-1author: wangmengnanimport osimport sysimport win32serviceutilimport win32serviceimport win32eventclass PythonService(win32serviceutil.ServiceFramewor…

C# 值类型的局限性

如果程序希望使用一个值类型实例来进行同步&#xff0c;通常都会是错误(bug)。但运行时应该认为这是非法并抛出异常吗?在下面的代码示例中如果两个不同的线程同时调用同一个Counter 实例的Increment 方法&#xff0c;将会发生什么?class Counter{private int _i;public int I…

linux之网络编程ICMP校验算法

1、ICMP校验算法代码 unsigned short cal_chksum(unsigned short *addr,int len) { int nleft len; int sum 0; unsigned short *w addr; unsigned short answer 0; /*把ICMP报头二进制数据以2字节为单位累加起来*/ while(nleft > 1) { sum *w; nle…

第4章 字符串和格式化输入/输出

学习笔记——《C Primer Plus》 第4章 字符串和格式化输入/输出4.1 前导程序4.2 字符串简介4.2.1 char 类型数组和 null 字符4.2.2 使用字符串4.2.3 strlen() 函数4.3 常量和 C 预处理器4.3.1 符号常量1. 使用**符号常量**的好处:2. 创建符号常量4.3.2 const 限定符4.3.3 转换说…

关于visual studio类视图和资源视图不显示类和资源的问题

今天因为要上一个项目&#xff0c;需要用到SSIS采集包&#xff0c;就打开以前做好的包来看了下&#xff0c;结果发现解决方案资源管理器不显示解决方案内容了。没有办法。百度不到&#xff0c;重装吧&#xff0c;再打开仍然不行&#xff0c;还是不能显示内容。后来在msdn论坛上…

ANT简明教程[转载]

一、ant关键元素 1. project元素 project 元素是 Ant 构件文件的根元素&#xff0c; Ant 构件文件至少应该包含一个 project 元素&#xff0c;否则会发生错误。在每个 project 元素下&#xff0c;可包含多个 target 元素。接下来向读者展示一下 project 元素的各属性。 1) name…

ios之第一个程序Hello word, I am chenyu !

1、下载Xcode 个人建议网上下载Xcode&#xff0c;快些&#xff0c;特么再应用商店下载像日了狗一样&#xff0c;还要填写资料&#xff0c; 最后资料没有写好&#xff0c;无效字符。2、新建项目 下载好了Xcode&#xff0c;一步一步往下点就行&#xff0c;然后create 项目然后找m…