字符串匹配—KMP算法

Java36

KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人们称它为克努特—莫里斯—普拉特操作(简称KMP算法)。KMP算法的核心是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达到快速匹配的目的。具体实现就是通过一个next()函数实现,函数本身包含了模式串的局部匹配信息。KMP算法的时间复杂度O(m+n) 。
实现方式就不再这里献丑了,网上很多讲解,此处只是记录下c#实现的代码。

```
public class KMP
{
public static int[] GetNext(String ps)
{
char[] p = ps.ToArray();
int[] next = new int[p.Length];
next[0] = -1;
int j = 0;
int k = -1;
while (j < p.Length - 1)
{
if (k == -1 || p[j] == p[k])
{
next[++j] = ++k;
}
else

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
躬行算法之最小的最大值 Java

躬行算法之最小的最大值

最近看到这样一道面试题, 求最小的最大值,觉得挺有意思,在这里分享下。 给定一个数组 a,包含 n 个整数。再给定一个整数 k,可以给数据中任意整数加 1,总共可以加 k 次。加完 k 次之后,找出数...
PHP自定义日期英文格式 Feb 11,2015 Java

PHP自定义日期英文格式 Feb 11,2015

背景:[PHP小工具]项目中,经常会要求多版本语言支持,而日期也是必不可少的组成元素。 英文日期书写顺序分英式和美式,举例如。 美国:月日年(January 8th,2014 或 January 8,...
Python requests, pasel多线程爬取并下载小说 Java

Python requests, pasel多线程爬取并下载小说

使用PYTHON语言,用到的外部包有pasel, requests。 逻辑:首先得到该小说所有章节地址,再使用多线程访问链接,得到的内容放入object列表中,最后写入本地文件。 功能:设置菜单,由此...
数据库操作 Java

数据库操作

数据库操作 数据库基础数据库是一种 存储结构, 允许使用各种格式 输入、处理、检索 数据,且不用在每次需要数据时 重新输入数据。 select 语句: select语句 用于查询数据表中的数据。sel...
MongoDB 分片规则 Java

MongoDB 分片规则

生命本身毫无意义,只有死亡才能让你邃晓人性的真谛! Ideal is the beacon. Without ideal, there is no secure direction; without ...
JavaSE_关键字 接口 代码块 枚举 Java

JavaSE_关键字 接口 代码块 枚举

1 Java中的关键字 1.1 static关键字 static特点 : 静态成员被所在类的所有对象共享 随着类的加载而加载 , 优先于对象存在 可以通过对象调用 , 也可以通过类名调用 , 建议使用...
线程池使用 Java

线程池使用

线程池 1.工具类实现 undefined 线程池监控: long activeCount = ((ThreadPoolExecutor)instance).getActiveCount(); tas...
Hibernate基础入门2 Java

Hibernate基础入门2

HQL与Criteria HQL(Hibernate Query Language)-官方推荐面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写...
Java中的反射机制 Java

Java中的反射机制

1.聊聊Java中的反射机制 (1)先说说静态编译和动态编译: ①静态编译就是在编译的时候把你所有的模块都编译进exe里去,当你启动这个exe的时候所有模块都加载进来了。你写小程序没问题,但程序一大,...
Discuz论坛 自动加好友留言程序 Java

Discuz论坛 自动加好友留言程序

这次不同,想要在论坛发消息首先是要登录的,所以必须要一个账号,接着是让爬虫登录,这是最重要的一个步骤,登录后获取Cookie存储,在加好友发消息的时候都要用到Cookie。 在开发过程中,遇到了不少难...
B树索引的相关概念 Java

B树索引的相关概念

B树索引的相关概念 索引与表一样,也属于段(segment)的一种。里面存放了用户的数据,跟表一样需要占用磁盘空间。只 但是,索引中的数据存储形式与表中的数据格式非常不同。在理解索引时,您可以想象一本...
SpringMVC完整学习!!! Java

SpringMVC完整学习!!!

1.楔子 1.1、了解MVC 1.2、MVC框架的主要功能 2.初识SpringMVC 2.1、为什么要学习SpringMVC 2.2、了解SpringMVC 3.入门项目初体验! 4.Control...
Halo 开源项目学习(六):事件监听机制 Java

Halo 开源项目学习(六):事件监听机制

基本介绍 Halo 项目中,当用户或博主执行某些操作时,服务器会发布相应的事件,例如博主登录管理员后台时发布 "日志记录" 事件,用户浏览文章时发布 "访问文章" 事件。事件发布后,负责监听的 Bea...
Halo 开源项目学习(一):项目启动 Java

Halo 开源项目学习(一):项目启动

项目简介 Halo 是一个优秀的开源博客发布应用,在 GitHub 上广受好评,正好最近在练习写博客,借此记录一下学习 Halo 的过程。 项目下载 前提设置 导入项目 因为 Halo 使用 Grad...