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

【算法随想录04】KMP 字符串匹配算法

这是字符串模式匹配经典算法。

给定一个文本 t 和一个字符串 s,我们尝试找到并展示 s 在 t 中的所有出现(occurrence)。

#include<bits/stdc++.h>using namespace std;vector<int> KMP(string s) {int n = s.size();vector<int> ans(n, -1);int j = 0;for(int i = 1; i < n; i++) {j = ans[i - 1];while(j >= 0 && s[i] != s[j]) j = ans[j];if(j >= 0) ans[i] = j + 1;}return ans;
}int main() {string s1;string s2;cout << "主串:";cin >> s1;cout << "子串:";cin >> s2;vector<int> pi = KMP(s2);int a = s1.size(), b = s2.size();int i = 0, j = 0;while(i < a && j < b) {if(j == -1) {i++;j++;}if(s1[i] == s2[j]) {i++;j++;} else j = pi[j];}if(j==b) cout << s1 << "是" << s2 << "的主串" << endl;return 0;
}
http://www.lryc.cn/news/438616.html

相关文章:

  • TCP和MQTT通信协议
  • Python Pickle 与 JSON 序列化详解:存储、反序列化与对比
  • 第二百三十二节 JPA教程 - JPA教程 - JPA ID自动生成器示例、JPA ID生成策略示例
  • 计算机网络 ---- 计算机网络的体系结构【计算机网络的分层结构】
  • Vite + Electron 时,Electron 渲染空白,静态资源加载错误等问题解决
  • ZAB协议(算法)
  • 多个音频怎么合并?把多个音频合并在一起的方法推荐
  • 【Django】Django Class-Based Views (CBV) 与 DRF APIView 的区别解析
  • 如何增加Google收录量?
  • leetcode练习 格雷编码
  • 【LLM:Gemini】文本摘要、信息提取、验证和纠错、重新排列图表、视频理解、图像理解、模态组合
  • CMS之Wordpress建设
  • 使用Neo4j存储聊天记录的简单教程
  • 前端面试常考算法
  • 【机试准备】常用容器与函数
  • Base 社区见面会 | 新加坡站
  • 麒麟操作系统搭建Nacos集群
  • Imagination推出性能最高且具有高等级功能安全性的汽车GPU IP
  • 端口大全说明,HTTP,TCP,UDP常见端口对照表
  • dplyr、tidyverse和ggplot2初探
  • pandas:读取各类文件方法以及爬虫时json数据保存
  • 二、(JS)JS中常见的键盘事件
  • 【CSS】样式水平垂直居中
  • 深入理解数据分析的使用流程:从数据准备到洞察挖掘
  • CSS 响应式设计(补充)——WEB开发系列36
  • Qt常用控件——QDateTimeEdit
  • 什么是上拉,下拉?
  • 76-mysql的聚集索引和非聚集索引区别
  • 每日一题——第八十八题
  • 【创作活动】学习使用哪个编程工具让你的工作效率翻倍?