目录

  • 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 ,插入 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.字符串专题的更多相关文章

  1. LeetCode 字符串专题(一)

    目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...

  2. NOIP2018提高组金牌训练营——字符串专题

    NOIP2018提高组金牌训练营——字符串专题 1154 回文串划分 有一个字符串S,求S最少可以被划分为多少个回文串. 例如:abbaabaa,有多种划分方式.   a|bb|aabaa - 3 个 ...

  3. 字符串专题:map POJ 1002

    第一次用到是在‘校内赛总结’扫地那道题里面,大同小异 map<string,int>str 可以专用做做字符串的匹配之类的处理 string donser; str [donser]++ ...

  4. PHP 截取字符串专题

    1. 截取GB2312中文字符串 < ?php//截取中文字符串function mysubstr($str, $start, $len) {    $tmpstr = "" ...

  5. 【专题】字符串专题小结(AC自动机 + 后缀自动机)

    AC自动机相关: $fail$树: $fail$树上以最长$border$关系形成父子关系,我们定一个节点对应的串为根到该节点的路径. 对于任意一个非根节点$x$,定$y = fa_{x}$,那$y$ ...

  6. 并不对劲的字符串专题(二):kmp

    据说这些并不对劲的内容是<信息学奥赛一本通提高篇>的配套练习. 先感叹一句<信息学奥赛一本通提高篇>上对kmp的解释和matrix67的博客相似度99%(还抄错了),莫非mat ...

  7. 《剑指offer》字符串专题 (牛客11.01)

    字符串的题目难度不一,涉及到的考点有字符串处理.字符串匹配(自动机.正则).模拟,以及递归.动态规划等算法. 难度 题目 知识点 ☆ 02. 替换空格 从后往前 ☆☆ 27. 字符串的排列 回溯,St ...

  8. 字符串专题之KMP算法

    写点自己对KMP的理解,我们有两个字符串A和B,求A中B出现了多少次. 这种问题就可以用KMP来求解. 朴素的匹配最坏情况是O(n^2)的.KMP是个高效的算法,效率是O(n)的. KMP算法的思想是 ...

  9. 字符串专题:KMP POJ 3561

    http://poj.org/problem?id=3461 KMP这里讲的不错next的求法值得借鉴 http://blog.sina.com.cn/s/blog_70bab9230101g0qv. ...

随机推荐

  1. 【47.40%】【BZOJ 1875】[SDOI2009]HH去散步

    Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 1363  Solved: 646 [Submit][Status][Discuss] Descript ...

  2. dotnet core 集成到 Mattermost 聊天工具

    在找了很久的团队交流工具,发现了 Mattermost 最好用,但是还需要做一些定制化的功能,于是就找到了 Mattermost 插件开发,还找到了如何自己写服务集成到 Mattermost 里面 本 ...

  3. react-electron 项目打包体积尽可能减小的方法

    当一个react-electron项目做好之后就可以开始进行打包,首先就是打包react,这个自然不用多说,不过事先要记住一点,项目目录主进程文件main.js最好放在根目录,再执行打包命令 npm ...

  4. HTTPS RAS

    这篇文章讲的清楚 https://zhuanlan.zhihu.com/p/75461564

  5. 如何使用JMX来管理程序?

    什么是JMX JMX,全称Java Management Extensions,用于我们管理和监控java应用程序.JMX有以下用途: 监控应用程序的运行状态和相关统计信息. 修改应用程序的配置(无需 ...

  6. oracle数据库创建实例

    数据库已经安装完成,可以正常登陆查看用户等操作 system用户只能用normal身份登陆em.除非你对它授予了sysdba的系统权限或者syspoer系统权限. sys用户具有“SYSDBA”或者“ ...

  7. 选题Scrum立会报告+燃尽图 04

    此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8682 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐丽君 组名:组长 ...

  8. 洛谷$P4001\ [ICPC-Beijing 2006]$狼抓兔子 网络流+对偶图

    正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n ...

  9. j接近50道经典SQL练习题,附建表SQL解题SQL

    说明 本文章整理了47道常见sql联系题,包括建表语句,表结构,习题列表,解题答案都涵盖在本文章内.文末提供了所用SQL脚本下载链接.所有解题答案都是本人自己写的,广大读者如果在阅读使用中,有任何问题 ...

  10. 「CodeForces 476A」Dreamoon and Stairs

    Dreamoon and Stairs 题意翻译 题面 DM小朋友想要上一个有 \(n\) 级台阶的楼梯.他每一步可以上 \(1\) 或 \(2\) 级台阶.假设他走上这个台阶一共用了 \(x\) 步 ...