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

字符串模式匹配算法 KMP

子串与子序列

中文名称 常见英文名称 解释
子串 \(\tt substring\) 连续的选择一段字符(可以全选、可以不选)组成的新字符串
子序列 \(\tt subsequence\) 从左到右取出若干个字符(可以不取、可以全取、可以不连续)组成的新字符串

字符串模式匹配算法 KMP

应用:

  1. 在字符串中查找子串;
  2. 最小周期:字符串长度-整个字符串的 \(\tt border\)
  3. 最小循环节:区别于周期,当字符串长度 \(n \bmod (n - nxt[n]) = 0\) 时,等于最小周期,否则为 \(n\)

以最坏 \(\mathcal O(N+M)\) 的时间计算 \(t\)\(s\) 中出现的全部位置。

auto kmp = [&](string s, string t) {int n = s.size(), m = t.size();vector<int> kmp(m + 1), ans;s = "@" + s;t = "@" + t;for (int i = 2, j = 0; i <= m; i++) {while (j && t[i] != t[j + 1]) {j = kmp[j];}j += t[i] == t[j + 1];kmp[i] = j;}for (int i = 1, j = 0; i <= n; i++) {while (j && s[i] != t[j + 1]) {j = kmp[j];}if (s[i] == t[j + 1] && ++j == m) {ans.push_back(i - m + 1); // t 在 s 中出现的位置}}return ans;
};
http://www.zskr.cn/news/29249.html

相关文章:

  • Flink编程模型 - 详解
  • 工业4.0下的边缘存储设计:材料就地处理,响应更快更安全
  • 服务器关机用halt、poweroff还是shutdown -h now?一文帮你说明
  • Min25 筛
  • 完整教程:微软2025教育AI报告:教育群体采用AI的比例显著提升
  • 康拓展开
  • git回滚代码
  • 离散对数 bsgs 与 exbsgs
  • 【LTDC】LTDC 简介
  • 分类器案例 - -一叶知秋
  • 最大流
  • 最长路(topsort+DP算法)
  • 缩点(Tarjan 算法)
  • 常见概念
  • CNCF项目记录2025-10
  • 代理
  • 双碳目标下,MyEMS 为何成为制造企业的 “刚需工具”?
  • 树上路径交
  • 点分治 / 树的重心
  • 树论大封装(直径+重心+中心)
  • 书评-谋杀黄昏
  • 徐州信息技术服务管理体系认证渠道口碑榜:聚焦机构资质、服务案例及合规性评估
  • 完整教程:【汽车篇】AI深度学习在汽车零部件外观检测——铝铸件中的应用
  • 附加数据文件失败:操作系统错误 5:“5(拒绝访问。)”。 CREATE DATABASE 失败。无法创建列出的某些文件名
  • 20251024- 使用shell脚本分库定时备份MySQL数据
  • 2025年口碑好的食品级贴体盒,榴莲贴体盒实力源头
  • 2025年诚信的液压水渠成型机,全自动水渠成型机厂家最新权威推荐榜
  • 2025年10月扬州公考面试机构全景解析报告,基于专业测评的技术、性能及市场优势深度分析
  • 2025年耐用的陶瓷纤维异性件,硅酸铝纤维陶瓷纤维实力源头加工
  • 2025年口碑好的空气能地暖管,德国品牌地暖管厂家最新TOP推荐榜