KMP算法(快速模式匹配)

 详细理解看这里:http://kb.cnblogs.com/page/176818/

    或者这里:http://blog.csdn.net/yutianzuijin/article/details/11954939

next[]数组的意义是“除自身外的最大重复子串”。

next数组计算:

理解了kmp算法的基本原理,下一步就是要获得字符串f每一个位置的最大公共长度。这个最大公共长度在算法导论里面被记为next数组。在这里要注意一点,next数组表示的是长度,下标从1开始;但是在遍历原字符串时,下标还是从0开始。假设我们现在已经求得next[1]、next[2]、……next[i],分别表示长度为1到i的字符串的前缀和后缀最大公共长度,现在要求next[i+1]。由上图我们可以看到,如果位置i和位置next[i]处的两个字符相同(下标从零开始),则next[i+1]等于next[i]加1。如果两个位置的字符不相同,我们可以将长度为next[i]的字符串继续分割,获得其最大公共长度next[next[i]],然后再和位置i的字符比较。这是因为长度为next[i]前缀和后缀都可以分割成上部的构造,如果位置next[next[i]]和位置i的字符相同,则next[i+1]就等于next[next[i]]加1。如果不相等,就可以继续分割长度为next[next[i]]的字符串,直到字符串长度为0为止。

字符串匹配:

计算完成next数组之后,我们就可以利用next数组在字符串O中寻找字符串f的出现位置。匹配的代码和求next数组的代码非常相似,因为匹配的过程和求next数组的过程其实是一样的。假设现在字符串f的前i个位置都和从某个位置开始的字符串O匹配,现在比较第i+1个位置。如果第i+1个位置相同,接着比较第i+2个位置;如果第i+1个位置不同,则出现不匹配,我们依旧要将长度为i的字符串分割,获得其最大公共长度next[i],然后从next[i]继续比较两个字符串。

 

字符串是从0开始的 Next数组是从1开始的

void GetNext(char *T){int j = 0;int Tlen = strlen(T));for(int i = 1; i< Tlen; i++){j = next[i];while (j && T[i] != T[j]) j = next[i];if(T[j] == T[i]) next[i+i] = j+1;}
}

 

void KMP(char *S,char *T){int j = 0;int Slen = strlen(S);int Tlen = strlen(T);for(int  i = 0 ; i < Slen; i++){while (j && S[i] != T[j]) j = next[j];if(S[i] == T[j]) j++;if(j == Tlen){j = next[j];}}
}

 

转载于:https://www.cnblogs.com/yoyo-sincerely/p/5259952.html

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

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

相关文章

发言稿开场白范文_万能演讲开场白范文

ban the banalities that bog down most speech openings. defer the customary “nice-to-be-here” platitudes. direct your audience more into fawning than yawning over your speech opening. how?大部分演讲的开头都总是被那些陈词滥调拖入冷场&#xff0c;这是你应该…

计算机应用专业特色建设情况,【计算机应用论文】计算机应用类专业建设和革新探索(共3022字)...

1.高职高专计算机应用类专业现状剖析1.1专业定位欠准确&#xff0c;职业方向不明确计算机应用类专业相关的职业岗位多&#xff0c;每个职业岗位在知识水平和能力结构上各有侧重&#xff0c;计算机知识、技能体系较庞大&#xff0c;学生在三年时间内不太可能面面俱到、样样精通。…

mac pycharm安装设置_Mac系统Python、PyCharm安装及使用方法详解

一、下载安装Python3解释器使用Python3Python之父Guido van Rossum在邮件列表上宣布 Python 2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python 2.7有关的支持&#xff0c;则需要付费给商业供应商。12**Guido van Rossum 表示&#xff1a;**Lets not p…

《JAVA课程设计》实训第四天——《猜猜看》游戏

第四天&#xff0c;本来想进一步去改进《猜猜看》游戏的。可是非常多问题都不理解。也不熟悉怎么去弄到连接数据库。统计猜对次数&#xff0c;所以并没有进行再多的改动。 基本上就是这种执行结果了 import java.awt.EventQueue; import javax.imageio.ImageIO; import jav…

小凯机器人软件_Cruzr-Cruzr(机器人控制软件)下载 v1.5.20190706.48官方版--pc6下载站...

Cruzr客户端是这款智能云平台商用服务机器人Cruzr的配套软件&#xff0c;多台设备&#xff0c;一键多控&#xff0c;配套远程多机集控系统软件可以进行脚本、地图、视频等批量管理&#xff0c;可实现多台设备异地集中控制、全方位广告投放和同时支持自主巡逻以及指令控制巡逻。…

游戏笔记本计算机购买,2021大学生买电脑,容易犯的七种错误!游戏本和轻薄本买哪个?...

要买电脑的小伙伴们&#xff0c;难道你们指望电脑很好买&#xff1f;怎么买都不会亏&#xff1f;然后只要想买&#xff0c;它就有货&#xff1f;然后怎么买都够用&#xff1f;然后只要喜欢的女孩&#xff0c;一追求就ok&#xff1f;所以今天这期视频&#xff0c;我就随便聊聊大…

gradle安装与配置_gradle相关安装

前言之前一直接触maven&#xff0c;因为换了工作的原因偶然接触了gradle。因为对gradle不太了解&#xff0c;所以在安装与使用的时候出现了这样那样的问题。gradle在Windows系统的安装与配置1、gradle的下载与安装下载链接&#xff1a;https://gradle.org/releases/。(可以根据…

android tag 快捷_Android Studio快捷键使用

logt 生成 TAG标签private static final String TAG "MainActivity";logm 打印方法具体日志Log.d(TAG, "onCreate() called with: " "savedInstanceState [" savedInstanceState "]");logd 打印Log.d()日志 loge logi logw......…

java selenium (二) 环境搭建方法一

webdriver 就是selenium 2。 webdriver 是一款优秀的&#xff0c;开源的&#xff0c;自动化测试框架。 支持很多语言。 本文描述的是用java Eclipse 如何搭建环境 阅读目录首先下载好Eclipse 和配置好Java 环境变量 步骤省略&#xff0c; 请百度方法一 添加jar包 官方下载地…

python拆分excel的sheet为单文件_pandas处理excel一个sheet拆分为多个sheet

指定某一列作为拆分依据,pandas如何把一个excel的一个sheet拆分为多个sheet呢&#xff1f;具体思路如下&#xff1a; 1、读取excel文件获取DataFrame对象df。 2、获取指定列的Series对象&#xff0c;去重该指定列得到分类。 3、循环分类对df做布尔判断写入新的excel。 具体实现…

jquery 树形框 横_利用jQuery设计横/纵向菜单

在网页中&#xff0c;菜单扮演着“指路者”的角色。如何设计一个人性化的菜单呢&#xff0c;下面小编带着大家一起做。效果图&#xff1a;设计历程&#xff1a;1.首先利用html中的和标签进行嵌套&#xff0c;搭起一个整体的框架。如下图所示&#xff1a;Html代码&#xff1a;横…

word和html互换,word与html互转(2) -- html转word

使用忠告使用该方式进行xhtml到word的转换, 简单转换是可以, 但是可能并没有想象中那么满意, 转换出来的word格式并不完美, 比如目录和标题都会丢失, 标题显示看起来一样, 但是是用正文加粗和加大字号来显示的. 毕竟word是一种文档格式, 而html是一种标记性语言, 要想实现完美兼…

2016年3月13日02:03:53

最近状态很糟糕&#xff0c;知道原因但是却又道不清说不明、、&#xff08;也许一句话就可以说明了&#xff1a;毕业季&#xff09; 自身存在太多太多问题了。 平时自己没怎么发现&#xff0c;在这一个多月的时间里&#xff0c;觉得自己完完全全变了一个人了&#xff0c;连我自…

arduino char*转string_Java 中 String 类的常用方法汇总

一、String 类的概念以及特性1、String 类的概念String 类代表字符串&#xff0c;在 java.lang 包中。字符串是常量 &#xff0c;用双引号引起来表示。 它的值在创建之后不能更改 。由 0 或多个字符组成&#xff0c;可以变相的理解成是一个由字符组成的数组。2、String 类的特性…

airtest测试网页_Airtest

软件简介Airtest是一个跨平台的UI自动化测试框架&#xff0c;适用于游戏和App。目前支持Windows和Android平台&#xff0c;iOS支持正在开发中。Airtest提供了跨平台的API&#xff0c;包括安装应用、模拟输入、断言等。 基于图像识别技术定位UI元素&#xff0c;你无需嵌入任何代…

html中的ppt文字不清晰,HTML页面的文字布局与文字效果.ppt

无序列表是一种“项目符号列表”。其中的项目都带有项目符号前缀。该列表包含在无序列表标记.. 内。列表中的每个项目都使用列表标记进行标记&#xff0c;其中LI表示List Item(列表项)。关闭标记是可选的。 输出时每一清单条目缩进&#xff0c;并且以黑点标示 注意清单条目不需…

R文件丢失

1.xml中有错误 2.未选中自动生成 解决&#xff1a; 检查代码&#xff0c;删除更目录后再生成转载于:https://www.cnblogs.com/childyngy/p/5271579.html

python读取配置文件获取所有键值对_python读取配置文件

转载&#xff1a;https://my.oschina.net/u/3041656/blog/793467 配置文件作为一种可读性很好的格式&#xff0c;非常适用于存储程序中的配置数据。在每个配置文件中&#xff0c;配置数据会被分组&#xff08;比如"config"和”cmd“&#xff09;.每个分组在其中指定对…

python调用numpy视频_Numpy的文件输入和输出使用

本课程讲解现在工业界和学术界流行的机器学习算法的相关知识&#xff0c;以及如何用python去实现这些算法。算法的讲解包括supervised learning(有监督式学习)和unsupervised learning(无监督式学习)两个部分。其中supervised learning包括classification(分类)和regression(回…

嵌入式软件工程师笔试题

1 . 用预处理指令 #define 声明一个常数&#xff0c;用以表明 1年中有多少秒&#xff08;忽略闰年问题&#xff09; #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 2 . 写一个 "标准"宏 MIN &#xff0c;这个宏输入两个参数并返回较小的一个。 #define MIN(A,B)&…