零、前言
一、单模式串匹配
定义:每次,模式串只能和字符串集合中一个串进行匹配。
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!)