
字符串
文章平均质量分 66
qichi_bj
这个作者很懒,什么都没留下…
展开
-
Remember the word, LA 3942, Trie Tree
给出一个由S个不同单词组成的字典和一个长字符串,把这个字符串分解成若干个单词的连接(单词可以重复使用),有多少种方法?比如4个单词 a、b、cd、ab 则 abcd 有两中分解方法:a+b+cd 和 ab + cd。参考文献:《算法竞赛入门经典训练指南》P208,刘汝佳,陈锋public class Trie { private final static int MAX_SIZE原创 2012-11-25 17:04:25 · 463 阅读 · 0 评论 -
后缀数组,Manber & Mayer 倍增算法
后缀数组是解字符串问题的一个工具,后缀数组的构建复杂度为O(NLogN),在后缀数组的基础上进行模板匹配的复杂度为O(MLogN)。下面的JAVA代码适用于只包含0-255之间字符的字符串的后缀数组的构建。参考文献:《算法竞赛入门经典训练指南》P221,刘汝佳,陈锋package ProgrammingContest;public class ArrayOfSuffix {原创 2012-11-17 20:57:56 · 1063 阅读 · 0 评论 -
后缀数组的最长公共前缀
除了后缀数组SA之外,对于字符串处理的问题,通常还需要RANK和HEIGHT两个数组。RANK数组存储每个后缀的排名,RANK[i]∈[0..n-1]为后缀i的排名。HEIGHT存储排名相邻的两个后缀的最长公共前缀,HEIGHT[i]=LCP(SA[i-1], SA[i]),即排名i-1和i的两个后缀的最长公共前缀的长度。在HEIGHT的基础上,如果要计算LCP[i,j],可以运用以下性质:L原创 2012-11-18 10:39:03 · 2639 阅读 · 0 评论 -
字符串组合问题
给两个串A[1..m]和B[1..n],现在要把B插入到A中,也就是说,得到一个A[1..p]B[1..n]A[p+1..m]的形式,也可以把B放到A的最前面或最后面。问能得到的字典序最小的串。B插入A总共有m+1中方式,每种方式对应于一个[0..m]间的数字(0表示插入在最前面,i表示插入在A[i]之后)。定义F(i,j) 为A[i..m]与B[j..n]的组合中字典序最小的串对应的原创 2012-10-28 20:12:29 · 386 阅读 · 0 评论 -
Aho-Corasick automation,AC 自动机
构造 AC 自动机分两步:第一步构造 Trie 树比较简单;第二步给 Trie 树的每个结点加 fail 边。给一个结点添加 fail 边时,从其父结点开始沿 fail 边开始搜索,直到找到一个匹配结点(即 p.next[c] != null 的结点,c 为当前字符),或者找到根结点,fail 边即指向找到的匹配结点或根结点,递推时按照 Trie 树的层次遍历,保证访问到某结点时其父结点的 fai原创 2012-12-04 14:52:05 · 795 阅读 · 0 评论