Thematic002.字符串专题
目录
- Trie字典树
- KMP
- AC自动机
- Manacher
- 回文自动机
- 后缀数组
- 后缀自动机
Trie字典树
概念
我们先来看看什么是Trie字典树

可以发现,这棵树的每一条边都有一个字符
有一些点是黄色的,表示它们被标记了
那么,哪些字符串在这棵树中出现过呢?
从树的根节点到每一个被标记的点的路径上的字符串就是对应黄色点所表示的字符串
举个例子,\(5\) 是一个被标记的点
说明这一条从根节点到 \(5\) 的路径 ( \(1\rightarrow2\rightarrow5\) )上的字符串,也就是 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.字符串专题的更多相关文章
- LeetCode 字符串专题(一)
目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...
- NOIP2018提高组金牌训练营——字符串专题
NOIP2018提高组金牌训练营——字符串专题 1154 回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式. a|bb|aabaa - 3 个 ...
- 字符串专题:map POJ 1002
第一次用到是在‘校内赛总结’扫地那道题里面,大同小异 map<string,int>str 可以专用做做字符串的匹配之类的处理 string donser; str [donser]++ ...
- PHP 截取字符串专题
1. 截取GB2312中文字符串 < ?php//截取中文字符串function mysubstr($str, $start, $len) { $tmpstr = "" ...
- 【专题】字符串专题小结(AC自动机 + 后缀自动机)
AC自动机相关: $fail$树: $fail$树上以最长$border$关系形成父子关系,我们定一个节点对应的串为根到该节点的路径. 对于任意一个非根节点$x$,定$y = fa_{x}$,那$y$ ...
- 并不对劲的字符串专题(二):kmp
据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 先感叹一句<信息学奥赛一本通提高篇>上对kmp的解释和matrix67的博客相似度99%(还抄错了),莫非mat ...
- 《剑指offer》字符串专题 (牛客11.01)
字符串的题目难度不一,涉及到的考点有字符串处理.字符串匹配(自动机.正则).模拟,以及递归.动态规划等算法. 难度 题目 知识点 ☆ 02. 替换空格 从后往前 ☆☆ 27. 字符串的排列 回溯,St ...
- 字符串专题之KMP算法
写点自己对KMP的理解,我们有两个字符串A和B,求A中B出现了多少次. 这种问题就可以用KMP来求解. 朴素的匹配最坏情况是O(n^2)的.KMP是个高效的算法,效率是O(n)的. KMP算法的思想是 ...
- 字符串专题:KMP POJ 3561
http://poj.org/problem?id=3461 KMP这里讲的不错next的求法值得借鉴 http://blog.sina.com.cn/s/blog_70bab9230101g0qv. ...
随机推荐
- Vue-route页面切换过渡动画
重点: 1.判断路由前进还是后退 2.切换时动画如何实现 1.需要给各个页面定义层级,切换路由时判断进入哪个层级页面,如果进入层级高页面做前进动画,否则做后退动画在路由定义中添加meta自定义参数 ...
- Sql Server知识点拨
一.Sql Server异常捕获try catch 二.集增加与修改的存储过程 三.显示某一列中有重复值的行 转载自:https://www.cnblogs.com/527289276qq/
- CMD操纵Mysql命令大全
连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登 ...
- 苹果IOS 证书申请及导出证书文件
在申请证书之前,前提是,你要注册一个苹果帐号,且交了个人或公司帐号99美元大概人民币600多一年费用申请开发者帐号,审核通过的开发者帐号,个人或公司或企业类型帐号. 如何申请苹果开发者帐号,这里不讲解 ...
- Channel 9视频整理【2】
JadeChang https://channel9.msdn.com/Niners/JadeChang 繁体中文视频 2016 Nano Server / Docker / Containers 打 ...
- 十二、格式化I/O
1.fprintf 表头文件 #include<stdio.h> 定义函数 int fprintf(FILE * stream, const char * format,.......); ...
- Pandas处理缺失数据
利用pandas.DataFrame.dropna处理含有缺失值的数据 1.使用形式: DataFrame.dropna(axis=0, how='any', thresh=None, subset= ...
- mysql中information_schema.schemata字段说明
1. 获取所有数据库信息(SCHEMATA) show databases; 查看用户下所有数据库信息:SCHEMATA表:提供了关于数据库中的库的信息.详细表述了某个库的名称,默认编码,排序规则.各 ...
- java的package和import机制
在说package.import机制前我们先来了解下java的CLASSPATH. CLASSPATH顾名思义就是class的路径,当我们在系统中运行某个java程序时,它就会告诉系统在这些地方寻找这 ...
- 如何在Linux上创建,列出和删除Docker容器
本篇文章介绍的内容是关于在Linux机器上创建,列出和删除docker容器,下面我们来看具体的内容. 1.启动Docker容器 使用下面的命令启动新的Docker容器.这将启动一个新的容器,并为你提供 ...