字符串
字符串
字符串匹配
字符串匹配是在文本串中查找模式串出现位置的过程。
特点
- 预处理时间:
或
,其中
是模式串长度,
是字符集大小
- 匹配时间:从
到
不等
- 适用于文本搜索、生物序列比对等场景
分类
| 朴素匹配 | 简单直观 | ||
| KMP | 线性时间 | ||
| Sunday | 实际效率高 | ||
| Boyer-Moore | 从右向左匹配 | ||
| AC自动机 | 多模式匹配 |
字符串哈希
字符串哈希是将字符串映射为整数的技术。
特点
- 预处理时间:
- 查询时间:
- 适用于快速字符串比较和子串查询
分类
| 单哈希 | 使用单个哈希值 | 实现简单,可能冲突 |
| 双哈希 | 使用两个哈希值 | 冲突概率极低 |
| 滚动哈希 | 动态维护哈希值 | 适用于滑动窗口 |
字典树
字典树(Trie)是一种用于高效存储和查找字符串的树形数据结构。
特点
- 插入/查找时间:
,其中
是字符串长度
- 空间复杂度:
- 适用于前缀统计、字符串集合维护等场景
分类
| 普通字典树 | 字符串集合维护 | 空间占用大 |
| 压缩字典树 | 合并单链节点 | 节省空间 |
| AC自动机 | 多模式匹配 | 结合KMP思想 |
回文串
回文串是正反读都相同的字符串。
特点
- 判断时间:
- 预处理时间:
(Manacher算法)
- 适用于回文串查找、统计等场景
分类
| 中心扩展 | 查找最长回文子串 | |
| Manacher | 查找最长回文子串 | |
| 动态规划 | 统计回文子串个数 |
应用场景对比
字符串匹配适合:
- 文本搜索和替换
- 生物序列比对
- 网络入侵检测
字符串哈希适合:
- 快速字符串比较
- 子串查询
- 字符串去重
字典树适合:
- 前缀统计
- 自动补全
- 字符串集合维护
回文串算法适合:
- 最长回文子串查找
- 回文子序列统计
- 文本特征分析
选择建议
- 单模式匹配选择KMP
- 多模式匹配选择AC自动机
- 需要快速比较子串选择字符串哈希
- 维护字符串集合选择字典树
- 处理回文串选择Manacher算法
牛客代码笔记-牛栋 文章被收录于专栏
汗牛充栋,学海无涯。<br/> 内含算法知识点讲解,以及牛客题库精选例题。<br/> 学习算法,从牛栋开始。
查看11道真题和解析
