零、前言

一、单模式串匹配

定义:每次,模式串只能和字符串集合中一个串进行匹配。

1、BF:简单粗暴,主串和模式串都不太长,时间复杂度为 O(m*n) 。

2、KP:字符集范围不要太大且模式串不要太长, 否则 hash 值可能冲突,时间复杂度为 O(n) 。

3、naive-BM:模式串最好不要太长(因为预处理较重),比如 IDE 编辑器里的查找场景; 预处理的时间复杂度为 O(m*m),匹配的时间复杂度为 O(n),实现较复杂,需要较多额外空间。

4、KMP:适合所有场景,整体实现起来也比 BM 简单,时间复杂度为 O(n+m),仅需一个 next 数组的 O(n) 额外空间。

二、多模式串匹配

定义:每次,模式串可以和字符串集合中多个串进行匹配。

1、naive-Trie:适合多模式串公共前缀较多的匹配,时间复杂度为 O(n*k) ,即:建 Trie 时间复杂度为 O(n),搜索的时间复杂度为 O(k),n 为字符串集中所有字符的数量,k 为要搜索的字符串的长度。

2、AC 自动机:适合大量文本中多模式串的精确匹配查找,可以到 O(n) 。

极客时间:《数据结构与算法之美》,《36.AC自动机:如何用多模式串匹配实现敏感词过滤功能》ziyuan 的评论。

(SAW:Game Over!)

数据结构与算法 / 字符串匹配算法汇总相关推荐

  1. 数据结构与算法--字符串匹配算法

    目录 概要 单模式与多模式的区别 单模式匹配算法 BF算法 概念 代码实现 时间复杂度 应用 RK算法 概念 代码实现 时间复杂度 应用 BM算法 概念 算法原理 代码实现 时间复杂度 应用 多模式匹 ...

  2. 数据结构与算法--字符串的排列组合问题

    字符串的全排列 题目:输入一个字符串,打印出改字符串中所有字符的所有排列.例如输入字符串abc,那么打印出由a,b,c字符组成的所有字符串:abc,acb,bac,bca,cab,cba 如何求解全排 ...

  3. 【Java面试高频问题】Java数据结构和算法基础知识汇总

    文章目录 Java数据结构和算法基础知识 一.Java数据结构 1. 线性结构:数组.队列.链表和栈 1.1 数组(Array) 1.2 稀疏数组 1.3 队列(Queue) 1.4 链表(Linke ...

  4. 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)

    ~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...

  5. 如何学习数据结构和算法——大佬文章汇总

    第一篇 第二篇. 作者:左程云 我分别说一下国内和国外的行情. 国内的话,一般来讲,工资高的公司在面试时算法和数据结构题目的比重较大,工资一般的公司比重较小.当然同样公司的不同岗位,要求也会不同,但总 ...

  6. 数据结构与算法-面试题汇总

    目录 栈和队列 哈希表 什么是哈希表,哈希表的实现是怎么样的,哈希冲突是什么,怎么解决哈希冲突? 树 简述完全二叉树 简述AVL树 简述红黑树 红黑树和AVL树有什么区别? 图 简述最小生成树和其对应 ...

  7. diff算法阮一峰_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法

    前言 文章的一开头,还是要强调下字符串匹配的思路 将模式串和主串进行比较 从前往后比较 从后往前比较 2. 匹配时,比较主串和模式串的下一个位置 3. 失配时, 在模式串中寻找一个合适的位置 如果找到 ...

  8. 大量的数据做字符串匹配_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法...

    前言 文章的一开头,还是要强调下字符串匹配的思路 将模式串和主串进行比较 从前往后比较 从后往前比较 2. 匹配时,比较主串和模式串的下一个位置 3. 失配时, 在模式串中寻找一个合适的位置 如果找到 ...

  9. 数据结构与算法笔记总结

    学习资源推荐: 1.程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦 程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦_v_JULY_v的博客-CSDN博客 2.推荐!数据结构 ...

最新文章

  1. c语言usb串口输出,C语言实现模拟USB对8bit数据的NRZI编码输出
  2. 缓冲区 cin() getline() getchar()
  3. python linecache模块读取文件用法详解
  4. CNCF 公布 2020 年 TOC 选举结果 | 云原生生态周报 Vol. 36
  5. 剑指 Offer II 014. 字符串中的变位词
  6. 【题意分析】1024 Palindromic Number (25 分)_38行代码AC
  7. TCP/IP协议栈模型分析
  8. 物联网安防技术融合在细分领域的应用分析
  9. python为什么忽然火了_为什么Python突然就火了起来了呢?
  10. java ee面试题专家总结(必看),Java EE面试题专家总结(必看)
  11. IDEA常用快捷键汇总
  12. 手动调整 HP ML350 Gen9 服务器风扇转速
  13. 面试题:数据库的优化
  14. 内存的读写速度是硬盘的多少倍
  15. 中国科学家完全破解世界级百年数学难题庞加莱猜想
  16. C盘空间大释放——Downloaded Installations
  17. MySQL —— 初识MySQL
  18. 一个账号多路由器拨号失败服务器无响应,PPPoE拨号失败 PPPoE拨号失败服务器无响应怎么办?...
  19. 现代C++教程1X读书笔记
  20. 2023考研常识知识之五类数学有哪些区别

热门文章

  1. DJANGO里让用户自助修改邮箱地址
  2. linux-telnet服务配置
  3. apache hive 使用概述
  4. [导入]ASP.NET生成高质量缩略图通用函数(c#代码)
  5. 算法与数据结构(一)
  6. 【5分钟搞定】如何将py打包成exe可执行文件
  7. Redis 命令--Redis哈希(hash)
  8. SpringBatch 读取JSON(JsonItemReader)用法(十一)
  9. vue elementUI表单输入完成后回车触发事件@keyup.enter.native
  10. 【人工智能作业及答案】什么叫智能?什么叫人工智能?人工智能科学体系大致分哪几个层次?