约定 txt 是 主字符串 ,pat 是 模式串;

假设 pat = "ABABABC" ; txt="ABAABBABABABCA";

`ABABABABABABCA

`ABABABC

`ABABABC

`ABABABC

...........

依次对其并且依次比较 TLE 了;so 需要 improve ~

ABABABABABABCA

ABABABC
                    |
如果在 | 这个位置比较的话 那么

ABABABABABABCA

ABABABC
                         |
pat可以往后移动2单位  优化了诶~ //  向后移动所能移动的max位移,,

所以我们要做的就是

get 一个 next[] 来确定

在pat 第 i 位匹配不成功的话

需要 从第pat の 第 next[i] 位置 重新匹配

· getnext(string pat)代码实现:

int* getnext(string pat)
{int *next=new int [pat.length()];next[0]=-1;int i=0,k=-1;while(i<pat.length()){if(k==-1||pat[i]==pat[k]){k++;next[++i]=k;}elsek=next[k];// 需要 从第pat の 第 next[i] 位置 重新匹配  }for(int i=0;i<pat.length();i++){cout<<next[i]<<" ";}return next;
}

在得知

在pat 第 i 位匹配不成功的话

需要 从第pat の 第 next[i] 位置 重新匹配

之后就可以开始匹配txt了

int KMP(string txt,string pat)
{int *next=getnext(pat);int i=0;int j=0;while(i<txt.length()&& j<pat.length()){if(j==-1||pat[j]==txt[i]){j++;i++;}elsej=next[j];}if(j>=pat.length()){cout<<"在txt中找到了pat!!"<<endl;cout<<"位置是"<<i-pat.length()<<endl;}
}

KMP完成:

完整代码测试-》

#include<iostream>
using namespace std;
int* getnext(string pat)
{int *next=new int [pat.length()];next[0]=-1;int i=0,k=-1;while(i<pat.length()){if(k==-1||pat[i]==pat[k]){k++;next[++i]=k;}elsek=next[k];}for(int i=0;i<pat.length();i++){//cout<<next[i]<<" ";}return next;
}
int KMP(string txt,string pat)
{int *next=getnext(pat);int i=0;int j=0;while(i<txt.length()&& j<pat.length()){if(j==-1||pat[j]==txt[i]){j++;i++;}elsej=next[j];}if(j>=pat.length()){cout<<"在txt中找到了pat!!"<<endl;cout<<"位置是"<<i-pat.length()<<endl;}
}
int main()
{KMP("ABABABABABABCA","ABABABC");return 0;
}

KMP_??_!!!_~~相关推荐

  1. scala中_+_的意思

    代码如下: object WordCount { def main(args: Array[String]): Unit = { val inputPath = args(0) val outputP ...

  2. 教师招聘计算机面试说课稿,教师招聘面试常见问题_ _信息技术说课稿.doc

    教师招聘面试常见问题_ _信息技术说课稿 1. 为什么要选择教师这个行业? [参考答案]:对教师的培养未来会有很大的发展空间. 2.你最尊敬的教育家是谁,为什么? [参考答案]:我之所以崇拜陶行知,就 ...

  3. α_β_γ_δ_ε_ζ_η_θ_ι_κ_λ_μ_ν怎么读

    α_β_γ_δ_ε_ζ_η_θ_ι_κ_λ_μ_ν怎么读 大写 小写 中文名 英文注音 意义 a α 阿尔法 alpha 角度:系数 b β 贝塔 beta 磁通系数:角度:系数 γ γ 伽玛 gam ...

  4. Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法

    马克-to-win @ 马克java社区:reduceByKey(_+_)是reduceByKey((x,y) => x+y)的一个 简洁的形式 */ val rdd08 = sc.parall ...

  5. 写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd

    写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd; int main(int argc, const char * argv[]) {char str[20];int ...

  6. MySQL学习总结_φ(❐_❐✧

    MySQL学习总结 一.MySQL的特点: 关系型数据库.跨平台.支持多种编程语言. 二.MySQL的数据类型 (一)数值类型 (1)整型 1.int 大整型(4个字节)取值范围:2 ** 32 - ...

  7. _​_​i​n​t​6​4​ ​与​l​o​n​g​ ​l​o​n​g​ ​i​n​t

    在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsig ...

  8. cmake / CMAKE _ * _ OUTPUT_DIRECTORY 说明

    一.CMAKE_LIBRARY_OUTPUT_DIRECTORY Where to put all the LIBRARY targets when built. This variable is u ...

  9. python做一个网页多少钱_网站建设平台_ 网站建设多少钱_ _做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...

    按照TIOBE发布的2020年11月编程语言排行版,Python首次高出了Java成为全球第二受接待的编程语言.近些年,跟着人工智能的飞速成长,Python已成为最受接待的编程语言之一.作为Pytho ...

最新文章

  1. 培养组学对已分离人类细菌和古菌物种库的贡献
  2. JVM优化系列-Java对象引用与可触及强度
  3. 手写数字识别项目代码——卷积神经网络LeNet-5模型
  4. 通用的linux下安装配置svn独立服务
  5. php查询过滤字段,php 字符过滤类,用于过滤各类用户输入的数据
  6. python标准正态分布表(scipy.stats)
  7. C# 替换Word文档中的书签内容【详细步骤】
  8. 写了三年程序,我25了.
  9. 网页端哔哩哔哩4倍速播放视频
  10. 基于Patachmatch的stereo matching笔记(一):《PatchMatch Stereo》
  11. Leedcode编程题18: 四数之和----C++实现
  12. 计算机工程怎么评,美国电气与计算机工程专业怎么样?评价如何
  13. 多臂老虎机(Multi-armed bandit problem)
  14. Unity shader 角色消失 溶解 隐身 效果
  15. 计算机相关知识小故事,转一个有意思的计算机小故事
  16. 文旅夜游项目如何做好景区内容建设
  17. 插上网线进入转发状态需要等30s,是什么问题?-网络热门问题分析
  18. 计算机会计综合作业,东财《会计信息系统》综合作业答卷
  19. 日语假名的罗马字表示法 注意事项:
  20. 不可不知的操作系统知识

热门文章

  1. 服务器登录密码 被修改密码,服务器登录密码被人改
  2. 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...
  3. sql嵌套查询和多表联合查询之间的差别
  4. 【云原生 | Envoy 系列】--Envoy两种健康检测方式
  5. 当你打开天猫的那一刻,推荐系统做了哪些工作?(转)
  6. html2canvas动态图片ios空白,html2canvas ios系统保存图片空白问题
  7. 目标检测------损失函数=类别损失+位置损失
  8. 单片机如何检测市电通断?(应用甚广~)
  9. [转]电荷泵/charge pump的原理介绍
  10. beego:跨域问题