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 ,插入 bnow=++cnt=2

技术图片

2.now=2 ,向下查找,发现没有 e ,插入 enow=++cnt=3

技术图片

3.now=3 ,向下查找,发现没有 e ,插入 enow=++cnt=4

技术图片

4.now=4 ,向下查找,发现没有 p ,插入 pnow=++cnt=5

技术图片

5.now=5 ,结束,标记 (5)

技术图片

现在,往里面继续插入 bed

6.now=1 ,向下查找 ,发现有 b ,跟着走 ,now=2

技术图片

7.now=2 ,向下查找 ,发现有 e ,跟着走 ,now=3

技术图片

8.now=3 ,向下查找 ,发现没有 d ,插入 dnow=++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.字符串专题的主要内容,如果未能解决你的问题,请参考以下文章

002 aware专题

昨天今天明天专题-计算机视觉与图形学002

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

CodeForces Round #521 (Div.3) E. Thematic Contests

1077E Thematic Contests 二分答案

kettle提取postgresql数据