目录

  • 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. linux 每-CPU 的变量

    每-CPU 变量是一个有趣的 2.6 内核的特性. 当你创建一个每-CPU 变量, 系统中每个处理 器获得它自己的这个变量拷贝. 这个可能象一个想做的奇怪的事情, 但是它有自己的优点. 存取每-CPU ...

  2. javascript基础之循环

    //while循环 <script type="text/javascript"> i = 1; while (i <= 6) { document.write( ...

  3. Spring Security学习笔记-自定义Spring Security过滤链

    Spring Security使用一系列过滤器处理用户请求,下面是spring-security.xml配置文件. <?xml version="1.0" encoding= ...

  4. vue-learning:19 - js - filters

    filters 基本使用 仅限在插值{{}}和v-bind指令中使用 管道符|分隔 链式调用 传入参数 全局注册和局部注册 纯函数性质(不能使用this) 基本使用 我们看下之前用计算属性实现的例子, ...

  5. Next.js 笔记

    NEXT 中文文档地址! next.js 只有服务端使用的包需要做单独处理,无需打包到项目中,可以使用@zeit/next-bundle-analyzer观察代码. Router.beforePopS ...

  6. PHP常用函数拾遗

     PHP中常用过滤函数addslashes().mysql_real_escape_string().mysql_escape_string() 如addslashes().mysql_real_es ...

  7. Xcode崩溃日志分析工具symbolicatecrash用法

    1.什么是symbolicatecrash? symbolicatecrash是Xcode自带的一个分析工具,可以通过机器上的崩溃日志和应用的.dSYM文件定位发生崩溃的位置,把crash日志中的一堆 ...

  8. acwing 102 -利用二分枚举区间平均值

    我真的是服了,看了一晚上发现居然,,,,, 上图吧,话说有人评论没... 对于结果来说,不一定要枚举有序数列,感觉这是一种猜结果的方法,只不过特别精确,令人发指 #include<cstdio& ...

  9. 微服务实战——微服务架构选型SpringCloud / Dubbo / K8S比较(一)

    ## 说在前面 大概是三年前,因一些原因公司原项目最初为单体结构部署,所有业务模块都在一个项目里面,而后随着业务的不断膨胀以及模块之间的耦合,导致后面增加或修改一些简单业务时的成本都会变的极大.新入职 ...

  10. C# 添加文本、图片到PDF文档(基于Spire.Cloud.PDF.SDK)

    Spire.Cloud.PDF.SDK提供了接口PdfTextApi及PdfImagesApi用于添加文本和图片到PDF文档,添加文本时,可格式化文本样式,包括文本字体类型.字号.字体样式.文本颜色. ...