Thematic002.字符串专题
Posted 666dhg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Thematic002.字符串专题相关的知识,希望对你有一定的参考价值。
目录
- Trie字典树
- KMP
- AC自动机
- Manacher
- 回文自动机
- 后缀数组
- 后缀自动机
Trie字典树
概念
我们先来看看什么是Trie字典树
可以发现,这棵树的每一条边都有一个字符
有一些点是黄色的,表示它们被标记了
那么,哪些字符串在这棵树中出现过呢?
从树的根节点到每一个被标记的点的路径上的字符串就是对应黄色点所表示的字符串
举个例子,(5) 是一个被标记的点
说明这一条从根节点到 (5) 的路径 ( (1
ightarrow2
ightarrow5) )上的字符串,也就是 ad
,就在这棵树内
插入字符串(构建Trie字典树)
步骤
1. 初始化
新建一个根节点 (1)
2. 插入字符串
我们从根节点开始,即 now=1
接着看与 now
点相连的边中有没有字符为 s
的
如果有,跟着这条边走,即
now=s的点编号
如果没有,新建一个点,即
now=++cnt (cnt为点的数量)
最后,标记终点,即 over[now]=true
例子
我们现在要往一个空的Trie字典树里插入 beep
1.now=1
,向下查找,发现没有 b
,插入 b
,now=++cnt=2
2.now=2
,向下查找,发现没有 e
,插入 e
,now=++cnt=3
3.now=3
,向下查找,发现没有 e
,插入 e
,now=++cnt=4
4.now=4
,向下查找,发现没有 p
,插入 p
,now=++cnt=5
5.now=5
,结束,标记 (5)
现在,往里面继续插入 bed
6.now=1
,向下查找 ,发现有 b
,跟着走 ,now=2
7.now=2
,向下查找 ,发现有 e
,跟着走 ,now=3
8.now=3
,向下查找 ,发现没有 d
,插入 d
,now=++cnt=6
9.now=6
,结束 ,标记 (6)
代码
bool over[maxn];
int cnt=0,trie[maxn][maxm];
void Insert(string str)
{
int now=1;
for(int i=0;i<str.size();i++)
{
int next=str[i]-'a';
if(!trie[now][next])
trie[now][next]=++cnt;
now=trie[now][next];
}
over[now]=true;
}
KMP
AC自动机
Manacher
回文自动机
后缀数组
后缀自动机
以上是关于Thematic002.字符串专题的主要内容,如果未能解决你的问题,请参考以下文章
HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒