KMP_??_!!!_~~
约定 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_??_!!!_~~相关推荐
- scala中_+_的意思
代码如下: object WordCount { def main(args: Array[String]): Unit = { val inputPath = args(0) val outputP ...
- 教师招聘计算机面试说课稿,教师招聘面试常见问题_ _信息技术说课稿.doc
教师招聘面试常见问题_ _信息技术说课稿 1. 为什么要选择教师这个行业? [参考答案]:对教师的培养未来会有很大的发展空间. 2.你最尊敬的教育家是谁,为什么? [参考答案]:我之所以崇拜陶行知,就 ...
- α_β_γ_δ_ε_ζ_η_θ_ι_κ_λ_μ_ν怎么读
α_β_γ_δ_ε_ζ_η_θ_ι_κ_λ_μ_ν怎么读 大写 小写 中文名 英文注音 意义 a α 阿尔法 alpha 角度:系数 b β 贝塔 beta 磁通系数:角度:系数 γ γ 伽玛 gam ...
- Spark Scala当中reduceByKey(_+_) reduceByKey((x,y) => x+y)的用法
马克-to-win @ 马克java社区:reduceByKey(_+_)是reduceByKey((x,y) => x+y)的一个 简洁的形式 */ val rdd08 = sc.parall ...
- 写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd
写一段代码将a_b_ _c_ _ _d_转换成_ _ _ _ _ _ _abcd; int main(int argc, const char * argv[]) {char str[20];int ...
- MySQL学习总结_φ(❐_❐✧
MySQL学习总结 一.MySQL的特点: 关系型数据库.跨平台.支持多种编程语言. 二.MySQL的数据类型 (一)数值类型 (1)整型 1.int 大整型(4个字节)取值范围:2 ** 32 - ...
- __int64 与long long int
在做ACM题时,经常都会遇到一些比较大的整数.而常用的内置整数类型常常显得太小了:其中long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647.而unsig ...
- cmake / CMAKE _ * _ OUTPUT_DIRECTORY 说明
一.CMAKE_LIBRARY_OUTPUT_DIRECTORY Where to put all the LIBRARY targets when built. This variable is u ...
- python做一个网页多少钱_网站建设平台_
网站建设多少钱_
_做一个企业网站需要多少钱_64岁的Python之父表示退休后太无聊 正式加入微软...
按照TIOBE发布的2020年11月编程语言排行版,Python首次高出了Java成为全球第二受接待的编程语言.近些年,跟着人工智能的飞速成长,Python已成为最受接待的编程语言之一.作为Pytho ...
最新文章
- 培养组学对已分离人类细菌和古菌物种库的贡献
- JVM优化系列-Java对象引用与可触及强度
- 手写数字识别项目代码——卷积神经网络LeNet-5模型
- 通用的linux下安装配置svn独立服务
- php查询过滤字段,php 字符过滤类,用于过滤各类用户输入的数据
- python标准正态分布表(scipy.stats)
- C# 替换Word文档中的书签内容【详细步骤】
- 写了三年程序,我25了.
- 网页端哔哩哔哩4倍速播放视频
- 基于Patachmatch的stereo matching笔记(一):《PatchMatch Stereo》
- Leedcode编程题18: 四数之和----C++实现
- 计算机工程怎么评,美国电气与计算机工程专业怎么样?评价如何
- 多臂老虎机(Multi-armed bandit problem)
- Unity shader 角色消失 溶解 隐身 效果
- 计算机相关知识小故事,转一个有意思的计算机小故事
- 文旅夜游项目如何做好景区内容建设
- 插上网线进入转发状态需要等30s,是什么问题?-网络热门问题分析
- 计算机会计综合作业,东财《会计信息系统》综合作业答卷
- 日语假名的罗马字表示法 注意事项:
- 不可不知的操作系统知识
热门文章
- 服务器登录密码 被修改密码,服务器登录密码被人改
- 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -...
- sql嵌套查询和多表联合查询之间的差别
- 【云原生 | Envoy 系列】--Envoy两种健康检测方式
- 当你打开天猫的那一刻,推荐系统做了哪些工作?(转)
- html2canvas动态图片ios空白,html2canvas ios系统保存图片空白问题
- 目标检测------损失函数=类别损失+位置损失
- 单片机如何检测市电通断?(应用甚广~)
- [转]电荷泵/charge pump的原理介绍
- beego:跨域问题