随笔分类 -  string

摘要:Trie图和AC自动机的区别 Trie图是AC自动机的确定化形式,即把每个结点不存在字符的next指针都补全了。这样做的好处是使得构造fail指针时不需要next指针为空而需要不断回溯。 比如构造next[cur][i]的fail指针,cur为父节点,next[cur][i]为cur的儿子结点,如果 阅读全文
posted @ 2016-04-20 12:37 justPassBy 阅读(2783) 评论(0) 推荐(0)
摘要:我的原文链接是:http://alphaway.org/post-340.html 有一个字符串,这个字符串的首尾是连在一起的,要求寻找一个位置,以该位置为起点的字符串的字典序在所有的字符串中中最小。 【暴力算法】: O(n)的时间枚举起始位置,O(n)的时间比对字符串的字典序,总的时间复杂度是O( 阅读全文
posted @ 2016-03-19 20:51 justPassBy 阅读(244) 评论(0) 推荐(0)
摘要:求0->i内所有的本质不同的回文串的个数, 在 if(!next[cur][ch]) 成立,那么说明出现本质不同的字符串求每一个本质不同的回文串出现的个数,每个结点都是本质不同的字符串, cnt记录的就是了求s内回文串的个数,所有的cnt加起来就是了。求以i结尾的回文串的个数。 num函数就是了。 ... 阅读全文
posted @ 2015-09-14 18:38 justPassBy 阅读(243) 评论(0) 推荐(0)
摘要:如果s1s2s3s4...sn = s3s4s5...sns1s2那么说明s1=s2,s2=s3,s3=s4,s4=s5....说明这个字符串是一个周期串。更一般的情况是 s(i)s(i+1)...s(n)s(1)...s(i-1) = s(j)s(j+1)..s(n)s(1)...s(j-1) i... 阅读全文
posted @ 2015-09-14 09:19 justPassBy 阅读(891) 评论(0) 推荐(0)
摘要:给一个字符串,这个字符串是首位连起来的,要我们输出从哪个位置开始,顺时针走,还是你时针走,字典序最大如果字典序最大的字符串有多个,开始的下标越小越好,如果开始的下标又相同,那么顺时针的优先。原字符串为abab,那么只要在后面加上原字符串,变成abababab#,#是一个很小的字符, 然后进行后缀数组... 阅读全文
posted @ 2015-09-14 09:08 justPassBy 阅读(262) 评论(0) 推荐(0)
摘要: 阅读全文
posted @ 2015-08-23 20:30 justPassBy 阅读(115) 评论(0) 推荐(0)
摘要:hdu5384给定n个字符串Ai给定m个字符串Bi问所有的Bi在每个Ai中出现了多少次很显然,对Bi建Trie图,然后每次用Ai去匹配的时候,不断查找当前匹配串的最长后缀,这样就能找到答案了比赛的时候也这样水过了。(又一次我认为这样不会过,但是交上去却过了)如有有这样的数据的话1 1 110^5个a... 阅读全文
posted @ 2015-08-13 22:19 justPassBy 阅读(282) 评论(0) 推荐(0)
摘要:后缀数组是根据一个给定的字符串,然后取这个字符串的所有后缀,然后将后缀排序,生成两个数组,sa数组和rank数组sa[i]存的是排名第i的字符串下标rank[i]存的是以下标i开头的后缀的排名所以sa[rank[i]] = i rank[sa[i]] = i由于字符串的比较是多关键字比较,如果用s... 阅读全文
posted @ 2015-06-27 18:44 justPassBy 阅读(214) 评论(0) 推荐(0)
摘要:hdu2457给定n个模式串, 和一个文本串问如果修改最少的字符串使得文本串不包含模式串,输出最少的次数,如果不能修改成功,则输出-1dp[i][j] 表示长度为i的字符串, 到达状态j(Trie图中的结点)所需要修改的最少次数那么dp[0->n][0->size] = INF , dp[0][ro... 阅读全文
posted @ 2015-06-22 21:43 justPassBy 阅读(345) 评论(0) 推荐(0)
摘要:AC自动机是KMP的多串形式,当文本串失配时,AC自动机的fail指针告诉我们应该跳到哪里去继续匹配(跳到当前匹配串的最长后缀去),所以AC自动机的状态是有限的但是AC自动机具有不确定性, 比如要求x结点的孩子c的fail指针(x->next[c]->fail), 如果x的fail指针指向的结点没有... 阅读全文
posted @ 2015-06-21 22:45 justPassBy 阅读(213) 评论(0) 推荐(0)
摘要:给定一个字符串,要求求出从某个下标开始,这个字符串的字典序最小,即字符串的最小表示法比如字符串bbbaaa,从下标3开始表示为aaabbb,字典序最小暴力算法的时间复杂度为O(n^3)但是有线性的算法初始时,让i=0,j=1,k=0;分为三种情况,①如果str[i+k] == str[j+k] k+... 阅读全文
posted @ 2014-11-11 16:19 justPassBy 阅读(430) 评论(0) 推荐(0)
摘要:给定串S和T,求S的每一个后缀和T的最长公共前缀。方法1:暴力算法,时间复杂度O(n^2);方法2:后缀数组,利用height的性质可以求出该问题,时间复杂度为O(n),但是预处理为O(nlogn)方法3:扩展KMP,充分利用已经匹配过的性质,降低匹配的时间,时间复杂度为O(n)学习资料:http:... 阅读全文
posted @ 2014-11-11 15:38 justPassBy 阅读(244) 评论(0) 推荐(0)
摘要:height[i] 表示排名第i的后缀和排名第i-1的后缀的最长公共前缀,也即sa[i]与sa[i-1]的最长公共前缀。1、给定一个字符串,询问任意两个后缀的最长公共前缀,假设询问suffix(i)和suffix(j)的最长公共前缀,且rank[i] =k的分为一组,这样组内,任意两个后缀重复长度才... 阅读全文
posted @ 2014-11-09 10:26 justPassBy 阅读(418) 评论(0) 推荐(0)
摘要:证明1:对于一个字符串S,长度为L,如果由长度为len的字符串s(字符串s的最小循环节是其本身)循环k次构成,那么字符串s就是字符串S的最小循环节那么字符串有个很重要的性质和KMP挂钩,即 i - next[i] 为字符串s的长度 i%(i - next[i]) ==0证明:字符串S由s循环k次构成... 阅读全文
posted @ 2014-10-19 19:54 justPassBy 阅读(3187) 评论(0) 推荐(1)
摘要:1 /* 2 1.对n个字符串构造tire树 insertWord(node *root, char *word); 3 2.bfs构造fail指针 makeFail(node *root); 4 3.基于... 阅读全文
posted @ 2014-09-10 11:05 justPassBy 阅读(289) 评论(0) 推荐(0)