第一次写KMP的体会
例子
↓(不匹配位置 6)
T串:a b c a b c (i 表示位置)
S串:a b c a b d aaaaaaa (j 表示位置)
位置: 1 2 3 4 5 6
则 匹配到 a b c a b 则 i5 = j5 ≠ j4 ≠ j3 = j2 ≠ j1
所以因为 i5 与 j4 j3 都不相等 所以直接跳过 i5不与 j4 j3 匹配 直接与 j2 匹配
#include<iostream>
#include<String>
using namespace std;int next_[10] = { 1 };void getNext(string T) {int size, i, j, m;size = T.length();for (i = 0; i < size; i++) { //遍历 T 前后缀的所有情况m = 0;for (j = 1; j <= i; j++) { // 找到 相同前后缀的个数if (T[m] == T[j]) { //如果匹配到 目标串T 的第一个字符有重复,则判断随后的几个字符是否相同,即移动后继续判断m++; // 前缀移动一位j++; // 后缀移动一位while (T[m] == T[j] && j<=i) { //如果移动后仍然相同,则重复继续移动 直到 不相同 或 遍历T结束m++;j++;}if (j<=i)m = 0; //如果while中途结束(即匹配到不相同的字符,相同前后缀不成立) 则 前缀后缀相同数 m 清零// 如果while正常结束 则证明找到相同前后缀;}}next_[i+1] = i+1 - m; //最大移动位数 = 匹配到的字符个数(i+1) - 相同前后缀个数(与最后一个字符相同的字符的位置);}
}int kmp(string S,string T,int start=0) {getNext(T);int Ssize = S.length();int Tsize = T.length();int i, j, k, index;i = start;while (i <= Ssize-Tsize) { k = 0; //匹配到的个数index = i; // 当前与S匹配的位置for (j = 0; j < Tsize; j++) {if (T[j] == S[index]) { //第一个字符匹配成功后,T 和 S 各向后移动一位k++;index++;}else{ // 出现不匹配情况,就对字符串 S 进行最大移动i += next_[k]; // 根据匹配到的数量 对S串进行移动break; //移动后跳出本次循环,然后继续进行下一次匹配}}if (j == Tsize)return i; // 如果T完全遍历,则匹配到字符串}// while结束都没返回,则证明找不到该字符串return -1;
}int main() {string S, T;int size, index;cin >> S >> T;index = kmp(S, T, 0);cout << index;return 0;
}
第一次写KMP的体会相关推荐
- 第一次写blog,哈哈
第一次写blog,哈哈,还是有点感觉的,不过刚下好班,整个脑子乱的不行,可以说是一片糨糊,看看人家的blog很舒服,真的自己写了还真的不知道写些什么,看来这也是自己的总结,工作两年来,感觉肚子里还真的 ...
- 第一次写,python爬虫图片,操作excel。
第一次写博客,其实老早就注册博客园了,有写博客的想法,就是没有行动,总是学了忘,忘了丢,最后啥都没有,电脑里零零散散,东找找,西看看,今天认识到写博客的重要性. 最近闲着看了潭州教育的在线直播课程,颇 ...
- 前端老弟第一次写后端,崩了!
幽默轻松小知识,一起来看看老弟第一次写的后端代码,你觉得如何? 大家好,我是鱼皮,今天分享我的老弟第一次写后端代码时出现的囧事,希望大家引以为戒. 孽起 我的老弟小阿巴,目前大一,自学编程有一段时间了 ...
- 携程航班信息爬取(python)---第一次写博客,不好请别见外!
1.航班信息接口 api="https://flights.ctrip.com/itinerary/api/12808/products",这个接口中包含了所要查询的航班信息. * ...
- 第一次写writeup
My WriteUp 题目:http://ctf5.shiyanbar.com/DUTCTF/1.html (第一次写writeup...嗯都懂) 思路:点进去发现真的是what a fuck! 感觉 ...
- Latex第一次写论文记录
Latex第一次写论文记录 1. Latex的安装 2. Latex的简单使用 4. Latex模板 5. 论文标题,作者 6. Abstract 7. Introduction 7.1 文献的引用 ...
- Python paromiko每日生活学习感悟(第一次写,紧张hahaha)
Python paromiko每日生活学习感悟(第一次写,紧张hahaha) 学习篇 生活篇 学习篇 今天整天实习,解决了虚拟机通过SSH进行远程登录,需求还增加一项就是要采用多个接入多个设备,采用了 ...
- 创客学院 level1第一节学习完成(第一次写博客)
第一次写博客 创客学院 level1第一节学习完成 断断续续花了大概两天,已经在同学(龙欢)的推荐下,学习了java最基本的语法,大概就是和C语言差不了多少,感觉还是好接受,在昨天晚上也是和同学讨论了 ...
- 第一次写学术论文无从下手咋办?
又是一年准备复试的时候了,又有无数的科研学子叩开学术的大门,希望我的这篇文章对第一次写论文的研究生们有所帮助! 先跟大家分享一个学术网站:[学术范] 这里面有很多学术资源,英文文献特别多,对于英文写作 ...
最新文章
- 及cp含义_当我们谈论CP时,我们在谈论什么?
- 基于SSM实现在线聊天系统
- 结构化的网络故障检测与排除方法
- 一些学Web前端最常见的错误分享
- Linux系统编程9:进程入门之操作系统为什么这么重要以及它是如何实现管理的
- 链表和数组的区别在哪里?
- codeforces #309 div1 D
- 2017年9月计算机二级office题库百度云,2017年9月计算机二级office题库
- B/S系统界面设计与开发详解
- 计算机组成部件及其作用,计算机硬件组成成分各自的功能 计算机硬件有哪几部分组成?请分别说明各部分的作用?...
- 量化交易6-backtrader编写策略的时数据获取
- 五年之后的前端会是什么样?
- 新手入门PS人像磨皮教程
- 管壳式程序c语言,换热器模型原程序(C语言).doc
- 与、或、异或、按位取反
- 虚拟机内连接MotionPro一直处于正在连接状态
- Linux 面试知识点
- 控制互联网就是控制世界
- 【云原生】Prometheus PromQL讲解与实战操作
- 大家在人生低谷时有多惨,怎么熬过来的(二)
热门文章
- 重读Youtube深度学习推荐系统论文,字字珠玑,惊为神文
- 一个中心、三大原则,阿里这样做智能对话开发平台
- 波士顿动力机器人逆天,人类已无法阻挡它的三级跳!
- 如何从系统层面优化深度学习计算?
- 品友互动入榜“AI First——2017-2018年中国人工智能先行企业榜TOP10”
- AI一分钟 | 教育部公布高中新课标,编程、算法思维成必修内容;李彦宏否认百度会“All in AI”
- Spring中SmartLifecycle和Lifecycle的作用和区别
- 让SpringBoot不再需要Controller、Service、Mapper,这款开源工具绝了!!!
- 推荐一款 Java 对象映射神器
- 春节假期是弯道超车的好机会!