随笔分类 - 字符串算法
摘要:回文树 是一种用来解决回文串问题的高效结构。 它类似于AC自动机,每个节点代表一种回文串,每个对应字符$C$的孩子即指向在它两边同时加上字符$C$所形成的新回文串所代表的节点,fail指针指向它的以它的右端点结束的上一个可以匹配的回文串。 详细内容 :http://blog.csdn.net/u01
阅读全文
摘要:AC自动机 当匹配问题中的模板变为多个时,KMP算法就显得力不从心了,这时我们就需要一个AC自动机来进行匹配,原理上就是先构造一棵Trie,连出失配边,然后在Trie上进行匹配 代码:
阅读全文
摘要:KMP算法 鉴于关于KMP算法的讲义实在太多了(没错就是我懒得写),所以这里并没有关于KMP的具体讲解 代码: KMP树: 没错,当你把所有结点连向它的fail所指的结点,你就得到了一棵KMP树 这个有一个好,它结点是单调的,如果你顺着一个结点往上遍历,你就可以得到以这个结点为右端点的所有能与前缀m
阅读全文
摘要:Manacher算法 判断最长回文串是一个经典的问题,我们可以利用后缀数组在$O(nlogn)$时间内解决这个问题,但是Manacher算法却可以做到线性时间,而且易于编写的多。 详细说明: http://blog.csdn.net/ggggiqnypgjg/article/details/6645
阅读全文
摘要:后缀数组 假设我们要求出给定字符串的所有后缀及其顺序,朴素的做法时间复杂度为$O(n^2)$,但是善加利用后缀的性质,我们可以在$O(nlog^2n)$时间内解决这个问题 算法: 我们令$sa[i]$为字符串S中 当前 第$i$小的后缀的起始坐标,$rank[i]$为从$i$起始地后缀的名次 我们考
阅读全文
摘要:字典树 在存储字符串集合时,朴素的存储不仅空间开销大,而且不便于查找。在字典树中,我们把所有字符串汇集成一棵树,用公共前缀的方法节省空间。 操作: (1)插入:不断沿结点遍历,如无结点,则创立新节点。 (2)查找:同理,一直遍历即可。 代码(以HDU 1671为例): 左儿子右兄弟表示法: 有时候t
阅读全文

浙公网安备 33010602011771号