【字符串处理】关于KMP算法输出的是什么&代码
输入:
ABCDABTBD_TISABCDABC
ABCDABC
q为当前nxt处理的模版文本串下标;
k为“失配时去哪里”,详情请看注释。
--------------我是求完nxt的分界线------------------
q为当前文本串判断到哪里;
nxt为“失配时去哪里”。
输出:
nxt[q(1)]=k(0);
nxt[q(2)]=k(0);
nxt[q(3)]=k(0);
k(0)++;
nxt[q(4)]=k(1);
k(1)++;
nxt[q(5)]=k(2);
k(2)++;
nxt[q(6)]=k(3);
next数组求解完毕
q(0)++;
q(1)++;
q(2)++;
q(3)++;
q(4)++;
q(5)++;
q=nxt[q-1](0);
q=nxt[q-1](0);
q(0)++;
q(1)++;
q(2)++;
q(3)++;
q(4)++;
q(5)++;
q(6)++;
return i(19)-lp(7)+1;
pos=13
-------------------我是代码分界线------------------------
- #include<iostream>
- #include<cstring>
- using namespace std;
- string T,P;
- int nxt[];
- void mkNxt(){
- nxt[]=;
- int k,q;
- for(k=,q=;q<P.length();q++){//遍历模版串以求出next数组
- while(k>&&P[k]!=P[q]){
- k=nxt[k-];//如果遇到“已经匹配过超过一个字符”又不匹配的地方,返回上一次求出的next,找到第二个已经匹配的地方
- }
- if(P[k]==P[q]){//如果成功就k++
- k++;//换句话说,k代表着当前能够匹配的最大长度
- }
- nxt[q]=k;//记录
- }
- }
- void KMP(){
- int q=;
- for(int i=;i<T.length();i++){//文本T和模版P匹配
- while(q>&&P[q]!=T[i]){//如果不匹配就拿出“最长前后缀表”
- q=nxt[q-];
- }
- if(P[q]==T[i]){//匹配一个就加大长度
- q++;
- }
- if(q==P.length()){
- cout<<i-q+<<endl;//完全匹配就输出
- }
- }
- }
- int main(){
- cin>>T>>P;
- mkNxt();
- KMP();
- for(int i=;i<P.length();i++){
- cout<<nxt[i]<<" ";
- }
- }
显示神奇代码
这份代码在洛谷上提交通过了。
地址是 https://www.luogu.org/problemnew/show/P3375
【字符串处理】关于KMP算法输出的是什么&代码的更多相关文章
- 字符串匹配算法之 kmp算法 (python版)
字符串匹配算法之 kmp算法 (python版) 1.什么是KMP算法 KMP是三位大牛:D.E.Knuth.J.H.MorriT和V.R.Pratt同时发现的.其中第一位就是<计算机程序设计艺 ...
- 字符串匹配算法之————KMP算法
上一篇中讲到暴力法字符串匹配算法,但是暴力法明显存在这样一个问题:一次只移动一个字符.但实际上,针对不同的匹配情况,每次移动的间隔可以更大,没有必要每次只是移动一位: 关于KMP算法的描述,推荐一篇博 ...
- 动画演示Sunday字符串匹配算法——比KMP算法快七倍!极易理解!
前言 上一篇我用动画的方式向大家详细说明了KMP算法(没看过的同学可以回去看看). 这次我依旧采用动画的方式向大家介绍另一个你用一次就会爱上的字符串匹配算法:Sunday算法,希望能收获你的点赞关注收 ...
- 字符串模式匹配之KMP算法图解与 next 数组原理和实现方案
之前说到,朴素的匹配,每趟比较,都要回溯主串的指针,费事.则 KMP 就是对朴素匹配的一种改进.正好复习一下. KMP 算法其改进思想在于: 每当一趟匹配过程中出现字符比较不相等时,不需要回溯主串的 ...
- Java数据结构之字符串模式匹配算法---KMP算法2
直接接上篇上代码: //KMP算法 public class KMP { // 获取next数组的方法,根据给定的字符串求 public static int[] getNext(String sub ...
- Java数据结构之字符串模式匹配算法---KMP算法
本文主要的思路都是参考http://kb.cnblogs.com/page/176818/ 如有冒犯请告知,多谢. 一.KMP算法 KMP算法可以在O(n+m)的时间数量级上完成串的模式匹配操作,其基 ...
- 字符串模式匹配之KMP算法的next数组详解与C++实现
相信来看next数组如何求解的童鞋已经对KMP算法是怎么回事有了一定的了解,这里就不再赘述,附上一个链接吧:https://www.cnblogs.com/c-cloud/p/3224788.html ...
- 字符串匹配算法之kmp算法
kmp算法是一种效率非常高的字符串匹配算法,是由Knuth,Morris,Pratt共同提出的模式匹配算法,所以简称KMP算法 算法思想 在一个字符串中查找另一个字符串时,会遇到如下图的情况 我们通常 ...
- 字符串专题之KMP算法
写点自己对KMP的理解,我们有两个字符串A和B,求A中B出现了多少次. 这种问题就可以用KMP来求解. 朴素的匹配最坏情况是O(n^2)的.KMP是个高效的算法,效率是O(n)的. KMP算法的思想是 ...
随机推荐
- Java 中 父类变量访问子类方法 需要使用 类型转换 (instenceof)关键字 /类型判断/
通过数组元素访问方法的时候只能访问在 Animal中定义的方法,对 于 Tiger类和 Fish中定义的方法时却不能调用,例如语句 animal[2].swim();就是不正确的.当 需要访问这些 ...
- 如何快速获取yun2win app key?
注册yun2win开发者账号 1.在注册页面输入您的邮箱,点击下方发送,yun2win将会发送一封验证邮件到您的邮箱: 2.如果没有收到邮件请查看垃圾箱或者点击重新发送: 3.打开邮箱查看验证邮件,点 ...
- dos命令在vba中应用
正常情况下想要遍历文件夹和子文件夹,可以采用递归的方式 Sub ListFilesTest() With Application.FileDialog(msoFileDialogFolderPicke ...
- 微信小程序获取二维码并把logo替换为自己的头像
$avatarUrl = 'http://cms-bucket.nosdn.127.net/2018/05/28/a1a44ffdc2d24f928c1860d4fbf54703.jpeg?image ...
- 如何创建一个项目,让gitlab自动触发jenkins进行构建
前进是:你已经配置好jenkins+gitlab自动化布置了,这里只是常规构建新的项目时,需要做的配置,记录下来,以免忘了又着急 参考这篇博客: https://www.jianshu.com/p/e ...
- Django - 路由对应关系
1.对url路由关系命名,以后可以根据此名称,生成自己想要的url urls.py中: url('^fdsaafdf(\d+)/',views.index,name='indexx') url('^f ...
- [forward] cmake, CMakeLists.txt梳理
cmake intro 原文请见 cmake使用总结(转)-工程主目录CMakeList文件编写 在 Linux 下进行开发很多人选择编写 makefile 文件进行项目环境搭建,而makefile ...
- swift-延时加载函数
//延时加载函数 func delayLoad(){ let time: NSTimeInterval = 2.0 let delay = dispatch_time(DISPATCH_TIME_NO ...
- discourse论坛迁移
在源设备的操作备份数据文件tar -czvf discoursefile716.tar.gz /var/discourse然后把此discoursefile716.tar.gz文件传到需要迁移的设备上 ...
- 14.multi_match+most-fields策略
主要知识点 most-fields策略的用法 most-fields策略和best-fields的比较 best-fields策略:将某一个field匹配尽可能多的关键词的doc优先返 ...