目录

  • 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. 一个APP从启动到主页面显示经历了哪些过程?

    ①点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求: ②system_server进程接收到请求后,向zygote进程 ...

  2. Ubuntu常用命令大全 以及 PHP+MySQL代码部署在Linux(Ubuntu)上注意事项

    PHP+MySQL代码部署在Linux(Ubuntu)上注意事项 https://cloud.tencent.com/developer/article/1024187 Ubuntu常用命令大全 ht ...

  3. window10 自带虚拟机输入ip addr 不显示ip,显示字母加数字

    \(\color{Black}{文/魂皓轩}\) 1.在界面输入ip addr 2.通过ls 查看当前文件 我的虚拟机网络配置文件为ifcfg-eth0(不同主机文件名不一样) 3.通过 vi ifc ...

  4. $bzoj4722$ 由乃 搜索

    正解:搜索 解题报告: 传送门$QwQ$ 首先发现长度为$len$的子集的值域为$[0,v\cdot len+len]$,数量为$2^{len}$.所以当$2^{len}\geq v\cdot len ...

  5. 微信小程序背景音乐官方实例代码无效问题解决及音乐src获取方法

    最近在学习微信小程序时遇到了个问题:官方的背景音乐的api实例代码中的音乐src不管用(可能有期限,后面的方法获取的src同样可能有期限),因此本人只能自己去寻找办法获取src,现将方法记录在下面.( ...

  6. Appium Mac系统 自动测试环境搭建

    一.python 环境准备 Mac 自带 Python 环境,一般为 2.7 版本. 1.查看当前系统默认的Python路径 which python ==> /usr/bin/python 2 ...

  7. Javascript用途,语法特点,难点,调试工具,引入方式,命名规范,变量声明及赋值,数据类型,运算符

    JavaScript用来干什么 数据的验证 将动态的内容写入到网页当中(ajax) 对事件做出相应 读写html当中的内容 检测浏览器 创建cookies 模拟动画 语法特点 基于对象和事件驱动的松散 ...

  8. NetCore 启动地址配置详解

    背景 程序在发布部署时候,设置环境ASPNETCORE_URLS不生效,也没在代码里使用UseUrls("xxxx"),启动一直是http://localhost:5000.最后测 ...

  9. GitHub上的计算机视觉学习资料推荐

    9月份将要读研,导师是做cv的,最近学习时找到了不少的计算机视觉的资料,记录一下,同时也分享给需要的朋友 assmdx/ComputerVisionDoc AceCoooool/interview-c ...

  10. Angular.的简单运用

    从script引用angular文件.开始编写angular事件: 在angular文件中添加属性: ag-xxxx;初始化使用: ng-app="name"; 没有这个属性就不会 ...