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

KMP算法

原理见知乎:

https://www.zhihu.com/question/21923021/answer/281346746?utm_psn=1900243304974652304

寻找第一次出现的位置:

class Solution {
public:int kmp(string haystack, string needle) {int m=haystack.size(),n=needle.size();vector<int>next(n+1);int i=0,j=-1;next[0]=-1;while(i<n){if(j==-1||needle[i]==needle[j]){i++;j++;next[i]=j;}else j=next[j];}i=0,j=0;while(i<m&&j<n){if(j==-1||haystack[i]==needle[j]){i++;j++;}else j=next[j];}if(j!=n)return -1;return i-j;}
};

寻找全部出现的位置:

class Solution {
public:vector<int> kmp(string haystack, string needle) {int m=haystack.size(),n=needle.size();vector<int>next(n+1);int i=0,j=-1;next[0]=-1;while(i<n){if(j==-1||needle[i]==needle[j]){i++;j++;next[i]=j;}else j=next[j];}i=0,j=0;vector<int>res;while(i<m){if(j==-1||haystack[i]==needle[j]){i++;j++;}else j=next[j];if(j==n){res.push_back(i-j);i-=j-1;j=0;}}return res;}
};

http://www.xdnf.cn/news/191287.html

相关文章:

  • 英语五大基本句型
  • gradle-tasks.register(‘classesJar‘, Jar)解析
  • OpenCV计算机视觉实战(2)——环境搭建与OpenCV简介
  • 【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现
  • 【学习笔记】机器学习(Machine Learning) | 第六周|过拟合问题
  • 人工智能-深度学习之多层感知器
  • Flutter 学习之旅 之 Flutter 和 Android 原生 实现数据交互的MethodChanel和EventChannel方式的简单整理
  • 优化 Flutter 应用启动:从冷启动到就绪仅需 2 秒
  • SQL知识点合集---第二弹
  • 阿里qiankun微服务搭建
  • (leetcode)力扣100 3.最长连续序列(哈希?排序)
  • 【JS事件循环机制event-loop】
  • Rmarkdown输出为pdf的方法与问题解决
  • 数字图像处理 -- 眼底图像血管分割方法
  • 后缀数组~
  • 聊一聊接口自动化测试的稳定性如何保障
  • 在 IDEA 中写 Spark 程序:从入门到实践
  • 反向代理、负载均衡与镜像流量:原理剖析、区别对比及 Nginx 配置实践
  • 2025医疗领域AI发展五大核心趋势与路线研究
  • 在Linux系统中安装MySQL,二进制包版
  • 第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
  • 云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
  • 【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
  • yolov8+kalman 实现目标跟踪统计人流量
  • redis+lua+固定窗口实现分布式限流
  • 八大排序——直接插入排序/希尔排序
  • Spring Cloud初探之自定义负载均衡策略(五)
  • 让数据优雅落地:用 serde::Deserialize 玩转结构体实体
  • CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南
  • K8s新手系列之K8s中的资源