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. ...
随机推荐
- msbuild 项目文件常用判断条件
在写项目文件的时候,需要根据不同的条件定义或执行不同的代码,有一些比较常使用的判断,本文收藏起来,方便大家找 在 msbuild 的项目文件 cspoj 或 xx.target 等文件里面,可以使用 ...
- dotnet 删除只读文件
如果直接通过 File.Delete 删除只读文件会出现没有权限提示,可以先设置文件不是只读然后删除文件 try { File.Delete(file); } catch (UnauthorizedA ...
- 【12.78%】【codeforces 677D】Vanya and Treasure
time limit per test1.5 seconds memory limit per test256 megabytes inputstandard input outputstandard ...
- How to parse version range
Now we are making a solution that has to get the package reference. But the version of package refer ...
- E40笔记本无线网卡
E40笔记本无线网卡详情 网卡名称 Intel(R) Dual Band Wireless-AC 3160 网卡厂商 英特尔 Mac地址 34:E6:AD: 规格 - 基本要素 状态 Launched ...
- FreeSql取多表数据
该篇内容由个人博客点击跳转同步更新!转载请注明出处! 以文章随笔与分类为例. 表结构 部分字段如下,其他省略,为了展示一对多关联,一个分类下可以有多个文章.一个文章属于一个分类. blog_artic ...
- git authentication failed for 或 fatal:not a git repository
第一种解决 (我的是第一种解决) github上更改密码之后,我在本地操作git发现出错,错误代码如上,在网上搜了一圈,没有解决问题,后发现需要进行如下操作: 进入控制面板>用户账号>凭据 ...
- linux上传文件的命令
由于svm挂机不能通过svn提交代码,所以今天尝试了一下linux的rz和sz命令 1.sz命令是把文件下载到本地,使用方法如下 sz 文件名 回车之后会弹出一个本地的路径选择框,选择要下载的路径即 ...
- Struts2 基于XML校验(易百教程)
以下是的各类字段级和非字段级验证在Struts2列表: date validator: <field name="birthday"> <field-valida ...
- 线程的通信与协作:sleep、wait、notify、yield、join关系与区别
一.sleep.join.yield.wait.notify.notifyAll 1.sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁.也 ...