数据结构与算法 / 字符串匹配算法汇总
零、前言
一、单模式串匹配
定义:每次,模式串只能和字符串集合中一个串进行匹配。
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!)
数据结构与算法 / 字符串匹配算法汇总相关推荐
- 数据结构与算法--字符串匹配算法
目录 概要 单模式与多模式的区别 单模式匹配算法 BF算法 概念 代码实现 时间复杂度 应用 RK算法 概念 代码实现 时间复杂度 应用 BM算法 概念 算法原理 代码实现 时间复杂度 应用 多模式匹 ...
- 数据结构与算法--字符串的排列组合问题
字符串的全排列 题目:输入一个字符串,打印出改字符串中所有字符的所有排列.例如输入字符串abc,那么打印出由a,b,c字符组成的所有字符串:abc,acb,bac,bca,cab,cba 如何求解全排 ...
- 【Java面试高频问题】Java数据结构和算法基础知识汇总
文章目录 Java数据结构和算法基础知识 一.Java数据结构 1. 线性结构:数组.队列.链表和栈 1.1 数组(Array) 1.2 稀疏数组 1.3 队列(Queue) 1.4 链表(Linke ...
- 【2023王道数据结构】【字符串匹配算法】字符串的KMP(next数组)模式匹配算法C、C++完整实现(可直接运行)
~~~笔锋至此又怎能平淡而终,故事开始便不承认普通✌✌✌ ✌ 题目及题解持续更新中 [2023王道数据结构目录]课后算法设计题C.C++代码实现完整版大全 题目: 字符串的KMP(next)模式匹配算 ...
- 如何学习数据结构和算法——大佬文章汇总
第一篇 第二篇. 作者:左程云 我分别说一下国内和国外的行情. 国内的话,一般来讲,工资高的公司在面试时算法和数据结构题目的比重较大,工资一般的公司比重较小.当然同样公司的不同岗位,要求也会不同,但总 ...
- 数据结构与算法-面试题汇总
目录 栈和队列 哈希表 什么是哈希表,哈希表的实现是怎么样的,哈希冲突是什么,怎么解决哈希冲突? 树 简述完全二叉树 简述AVL树 简述红黑树 红黑树和AVL树有什么区别? 图 简述最小生成树和其对应 ...
- diff算法阮一峰_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法
前言 文章的一开头,还是要强调下字符串匹配的思路 将模式串和主串进行比较 从前往后比较 从后往前比较 2. 匹配时,比较主串和模式串的下一个位置 3. 失配时, 在模式串中寻找一个合适的位置 如果找到 ...
- 大量的数据做字符串匹配_【重学数据结构与算法(JS)】字符串匹配算法(三)——BM算法...
前言 文章的一开头,还是要强调下字符串匹配的思路 将模式串和主串进行比较 从前往后比较 从后往前比较 2. 匹配时,比较主串和模式串的下一个位置 3. 失配时, 在模式串中寻找一个合适的位置 如果找到 ...
- 数据结构与算法笔记总结
学习资源推荐: 1.程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦 程序员面试.算法研究.编程艺术.红黑树.机器学习5大系列集锦_v_JULY_v的博客-CSDN博客 2.推荐!数据结构 ...
最新文章
- c语言usb串口输出,C语言实现模拟USB对8bit数据的NRZI编码输出
- 缓冲区 cin() getline() getchar()
- python linecache模块读取文件用法详解
- CNCF 公布 2020 年 TOC 选举结果 | 云原生生态周报 Vol. 36
- 剑指 Offer II 014. 字符串中的变位词
- 【题意分析】1024 Palindromic Number (25 分)_38行代码AC
- TCP/IP协议栈模型分析
- 物联网安防技术融合在细分领域的应用分析
- python为什么忽然火了_为什么Python突然就火了起来了呢?
- java ee面试题专家总结(必看),Java EE面试题专家总结(必看)
- IDEA常用快捷键汇总
- 手动调整 HP ML350 Gen9 服务器风扇转速
- 面试题:数据库的优化
- 内存的读写速度是硬盘的多少倍
- 中国科学家完全破解世界级百年数学难题庞加莱猜想
- C盘空间大释放——Downloaded Installations
- MySQL —— 初识MySQL
- 一个账号多路由器拨号失败服务器无响应,PPPoE拨号失败 PPPoE拨号失败服务器无响应怎么办?...
- 现代C++教程1X读书笔记
- 2023考研常识知识之五类数学有哪些区别
热门文章
- DJANGO里让用户自助修改邮箱地址
- linux-telnet服务配置
- apache hive 使用概述
- [导入]ASP.NET生成高质量缩略图通用函数(c#代码)
- 算法与数据结构(一)
- 【5分钟搞定】如何将py打包成exe可执行文件
- Redis 命令--Redis哈希(hash)
- SpringBatch 读取JSON(JsonItemReader)用法(十一)
- vue elementUI表单输入完成后回车触发事件@keyup.enter.native
- 【人工智能作业及答案】什么叫智能?什么叫人工智能?人工智能科学体系大致分哪几个层次?