字符串

字符串是由字符连接而成的序列,是计算机科学中最基础的数据类型之一。字符串算法在文本处理、搜索引擎、生物信息学等领域有广泛应用。

常见问题类型

  • 字符串匹配:在文本中查找模式串出现的位置
  • 子串问题:处理字符串的连续片段
  • 前缀/后缀问题:处理字符串的开头和结尾部分
  • 回文串问题:处理正读反读相同的字符串
  • 子序列问题:处理不连续但保持相对顺序的字符序列

章节目录

基础知识

专题说明
字符串基础字符串的基本概念和操作
标准库各语言字符串库函数

字符串匹配

专题时间复杂度特点
字符串匹配-匹配问题概述
字符串哈希简单高效,有碰撞风险
KMP算法经典算法,利用前缀函数
BM算法 最优实践中最快的单模式匹配
Z函数扩展KMP

自动机与多模式匹配

专题说明
字典树Trie前缀树,多字符串公共前缀
AC自动机Trie + 失配指针,多模式匹配
序列自动机子序列匹配

后缀结构

专题说明应用
后缀数组后缀排序最长公共子串、重复子串
后缀自动机识别所有子串的最小自动机子串计数、最长公共子串
后缀树压缩的Trie存储所有后缀模式匹配、重复分析
后缀平衡树在线构建后缀数组动态字符串
广义SAM多字符串的后缀自动机多串问题

回文串

专题说明
Manacher 求所有回文子串
回文树维护所有本质不同回文串

其他

专题说明
最小表示法循环同构串的最小字典序
Lyndon分解字符串的Lyndon分解
Main-Lorentz串联重复子串

算法选择指南

flowchart TD
    A[字符串问题] --> B{单模式 or 多模式?}
    
    B -->|单模式匹配| C{需要什么?}
    B -->|多模式匹配| D[AC自动机]
    
    C -->|简单实现| E[字符串哈希]
    C -->|稳定高效| F[KMP]
    C -->|实践最快| G[Boyer-Moore]
    
    A --> H{后缀相关?}
    H -->|是| I{在线/离线?}
    I -->|离线| J[后缀数组]
    I -->|在线/复杂查询| K[后缀自动机]
    
    A --> L{回文相关?}
    L -->|所有回文| M[Manacher]
    L -->|本质不同| N[回文树]

此文件夹下有20条笔记。