当前位置: 首页 > news >正文

【算法——KMP】

1理解next数组定义:最长相等前后缀(不含当前字符并且不能是整体)

算法讲解100【扩展】 KMP算法原理和代码详解_哔哩哔哩_bilibili

next数组的值:假设这个i出现了不匹配就从next[i]的位置开始在再匹配

2next数组生成

 看一下是怎么跳的:算法讲解100【扩展】 KMP算法原理和代码详解_哔哩哔哩_bilibili

为什么这么跳:算法讲解100【扩展】 KMP算法原理和代码详解_哔哩哔哩_bilibili

next代码:算法讲解100【扩展】 KMP算法原理和代码详解_哔哩哔哩_bilibili

#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;vector<int> fun_next(string str1)    //next生成
{vector<int>next(str1.size());next[0] = -1;next[1] = 0;int i = 2, cn = 0;while (i < str1.size()){if (str1[i - 1] == str1[cn])next[i++] = ++cn;   else if (cn > 0)   //一次不成功,cn还可以往前跳 。cn为0说明没有前后缀,下一个就是0了 cn = next[cn];  else next[i++] = 0;}return next;
}int main()
{string str1("abcabc");string str2("afdfabcabcghj");vector<int>next = fun_next(str1);for (auto i : next)cout << i << " ";cout << endl;int m = str1.size(), n = str2.size();int i = 0, j = 0;while (i < m && j < n)   //匹配{if (str1[i] == str2[j]){i++; j++;}else if (i == 0)j++;elsei = next[i];}if (i == m)cout << "找到了:" << j - i;elsereturn -1;return 0;
}

相关文章:

  • Spring Boot 整合 Keycloak
  • K8s flink-operator 例子
  • 多无人机通信(多机通信)+配置ssh服务
  • opengauss使用遇到的问题,随时更新
  • react是一种语言?
  • 高效编程的利器 Jupyter Notebook
  • (undone) MIT6.824 Lecture1 笔记
  • 数据结构:树(并查集)
  • minio 快速入门+单机部署+集群+调优
  • 前端使用xlsx-js-style导出Excel,带样式,并处理合并单元格边框显示不全和动态插入表头解决
  • 分治思想--python
  • Nest.js实现一个简单的聊天室
  • 24.9.27学习笔记
  • WebRTC关键技术及应用场景:EasyCVR视频汇聚平台高效低延迟视频监控解决方案
  • C++:模拟实现string
  • [LeetCode] Wiggle Sort
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Java 内存分配及垃圾回收机制初探
  • javascript 总结(常用工具类的封装)
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • MobX
  • Node项目之评分系统(二)- 数据库设计
  • WePY 在小程序性能调优上做出的探究
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 从setTimeout-setInterval看JS线程
  • 前端路由实现-history
  • 前端相关框架总和
  • 强力优化Rancher k8s中国区的使用体验
  • 一起参Ember.js讨论、问答社区。
  • 智能合约开发环境搭建及Hello World合约
  • PostgreSQL之连接数修改
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • #565. 查找之大编号
  • #git 撤消对文件的更改
  • #pragma data_seg 共享数据区(转)
  • #Z0458. 树的中心2
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (Forward) Music Player: From UI Proposal to Code
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (笔试题)合法字符串
  • (补充)IDEA项目结构
  • (九十四)函数和二维数组
  • (四)linux文件内容查看
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)linux下的时间函数使用
  • (转)Mysql的优化设置
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • ... 是什么 ?... 有什么用处?
  • .gitignore文件—git忽略文件
  • .Net Core与存储过程(一)
  • .NET DataGridView数据绑定说明