目录

  • 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. GitHub使用详细流程(多人开发)

    联合项目开发GIThub使用 分支 在没有使用分支之前,git会默认有一个分支, 就是主分支(master分支,还记得 git push –u origin master这个命令吗?) 这里的mast ...

  2. Spring Security 学习笔记-信道过滤器

    信道过滤器主要职责是拦截不合规则的http请求,比如规定只能通过https访问资源,那么信道拦截器做相应的拦截处理,把http请求重定向为https请求,https请求则不做任何处理. 配置方式参照: ...

  3. jQuery---鼠标滚轮控制div横向滚动条左右移动

    HTML <div class="table-responsive"> <div class="fhtable" style="wi ...

  4. <sUbjeCt>Reverse aAlignment SemInaR

    翻译过来就是有关逆序对问题的专题. 因为大胆报名担任学校专题讲师所以跪着也要准备好课件...那什么是逆序对? 逆序对就是序列中ai>aj且i<j的有序对 举个栗子: 其中,5>4,但 ...

  5. kube-batch 解析

    kube-batch https://github.com/kubernetes-sigs/kube-batch 一. 做什么的? 官方介绍: A batch scheduler of kuberne ...

  6. cglib的动态代理

    前言 jdk中的动态代理通过反射类Proxy和InvocationHandler回调接口实现,要求委托类必须实现一个接口,只能对该类接口中定义的方法实现代理,这在实际编程中有一定的局限性. cglib ...

  7. 第二阶段:2.商业需求文档MRD:4.MRD-核心目标-产品构成

    竞争对手分析很重要.之后单独讲解.产品经理时刻要关注竞争产品的状态. 1.不同于PRD.这里只是概况.2.产品前景的核心目标就是:KPI(用户使用量:安装量,卸载量,日活数)跟ROI(开发人力,时间, ...

  8. 《HelloGitHub》第 45 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  9. TCP/IP||IP选路

    1.选路原理 在IP搜索路由表分为几个步骤 1.搜索匹配的主机地址 2.搜索匹配的网络地址 3.搜索默认表项. IP层进行选路实际是一种选路机制,搜索路由表并决定向哪个网络接口发送分组,区别选路策略, ...

  10. 转载:通过监控Nginx日志来实时屏蔽高频恶意访问的IP

    通过监控Nginx日志来实时屏蔽高频恶意访问的IP   目前在我的VPS上主要通过两种方式来限制ip的访问次数. 通过Nginx的limit_req配置来限制同一ip在一分钟内的访问次数 通过Ngin ...