![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀数组
文章平均质量分 82
詹明捷
此博客停止更新,迁移至www.zhanmingjie.com
展开
-
找出第二个文本抄袭第一个文本的所有位置和长度 后缀数组 UVA 10526 - Intellectual Property
题目链接题意:给定两个问题,要求找出第二个文本抄袭第一个文本的所有位置和长度,输出前k个,按长度从大到小先排,长度一样的按位置从小到大思路:后缀数组,把两个文本拼接起来,记录下拼接位置为tdp,这样如果sa[i] = tdp就是后面的文本开头,拼接起来的求出height数组,利用该数组的性质,从前往后扫一遍,从后往前扫一遍,把所有位置的最大值保存下来,最后在扫描一遍位置,把答案记录原创 2015-10-03 22:42:06 · 585 阅读 · 0 评论 -
每次询问求出两个字符串的最长公共前缀的长度 后缀数组+RMQ+lcp UVA 12338 - Anti-Rhyme Pairs
题目链接题意:给定一些字符串,每次询问求出两个字符串的最长公共前缀的长度思路:把字符串排序,就能求出height和rank数组,然后利用RMQ查询即可代码:#include #include #include #include #include using namespace std; const int N = 100005原创 2015-10-03 21:52:07 · 1097 阅读 · 0 评论 -
连续子串中出现超过一半次数的字符串 后缀数组 uva 11107 Life Forms
题目链接题意:给定一些字符串,求最长并且在所有字符串的连续子串中出现超过一半次数的字符串,输出这些字符串思路:把这些字符串接起来,拼接部分用一个不会出现的不重复的字符,然后求这个长串的后缀数组,利用height数组去进行二分求解,二分的判断里面如果有一个连续height段超过了一半次数,那么就是可行的,如果所有连续段都没有出现超过一半,就是不可行的代码:#inclu原创 2015-09-25 21:41:11 · 704 阅读 · 0 评论 -
求出长度为1, 2, 3, 4, 5....的字符串最大出现次数 后缀数组 UVA 11855 - Buzzwords
题目链接题意:给定一个文本,求出长度为1, 2, 3, 4, 5....的字符串最大出现次数,一直找到出现次数不大于1为止思路:后缀数组,把空格去掉得到一个字符串,构造height数组,然后就是后缀数组的简单应用了,找连续一段最长的段并且都大于当前正在查找的长度代码:#include #include #include #include #i原创 2015-10-03 22:05:10 · 553 阅读 · 0 评论 -
重复出现超过m次的最长的子串的最大下标 后缀数组或Hash+LCP UVA 12206 - Stammering Aliens
题目链接题意:给定一个字符串,找出重复出现超过m次的字串的最大开始下标思路:hash大法,需要点人品,然后二分答案,每次利用hash值去找出最大下标即可代码:#include#include#includeusing namespace std;const int maxn = 40000 + 10;const int x = 123;int n, m原创 2015-09-25 21:45:00 · 872 阅读 · 0 评论 -
字符串k在第li到第ri个字符串中一共出现了几次 后缀数组+线段树 Codeforces Div. 1E. Mike and Friends
http://codeforces.com/problemset/problem/547/E题意:给出n个字符串和q个询问,每个询问给出一个区间[li,ri]和数字k,问字符串k在第li到第ri个字符串中一共出现了几次?题目分析:思路一这题用后缀数组来做,十分直观。我的方法是O(nlog2n),O(nlogn)的方法就是把线段树换成主席树来实现(不想原创 2015-10-08 16:02:41 · 761 阅读 · 0 评论