数据结构与算法 / 字符串匹配算法汇总

零、前言

一、单模式串匹配

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

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!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值