
后缀数组
Bahuia
软件工程博士
展开
-
POJ 1743 后缀数组+二分
题意:题目链接:http://poj.org/problem?id=1743 求一个串中长度最长两个不重叠的相似子串的长度,相似定义为两个串长度相同,且相同下标的数字差相同。如:1,3,2和7,9,8,差都是6。思路:两个串的相似,还可以理解为每个串相邻的两个数字差都相同,因此要把原串转化成差的串,然后对新串求height数组,二份答案,每个答案x,对height分组,看每一组中下标差是否大于等于原创 2017-09-19 11:07:36 · 476 阅读 · 0 评论 -
UVA 10829 后缀数组+技巧计数
题意:题目链接:https://vjudge.net/problem/UVA-10829 找出一个字符串中,形如UVU的且V长度为g的子串的个数,其中U非空。思路:可以用后缀数组也可以直接暴力,但该题重点是在计数方式上。 后缀数组可以计算两个起点i,j的LCP,但是要保证中间要夹上正好长度为g的V,这需要枚举i,j,复杂度为O(n^2),太高了。 这里有一个技巧,考虑假设U的长度为L,那么对于原创 2017-09-20 09:15:36 · 536 阅读 · 0 评论 -
POJ 3261 后缀数组+二分
题意:题目链接:http://poj.org/problem?id=3261 在一个字符串S中求至少出现k次的最长的字符串的长度。思路:经典题,后缀数组+二分 注意此题需要离散化。代码:#include <cstdio> #include <vector> #include <algorithm> using namespace std; const int MAXN = 2e4 + 10; c原创 2017-09-20 19:06:23 · 305 阅读 · 0 评论 -
HDU 6194 后缀数组+单调栈
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6194 找到一个字符串中恰好出现k次的子串的数目。思路:计算出height数组,根据height数组进行操作,因为子串恰好出现k次,很显然需要找到一个长度为k-1的区间,这个区间要满足区间两边的height都比区间内的最小值要小,这样利用单调栈求出每个height左右两边第一个比height小的位原创 2017-09-21 15:45:51 · 474 阅读 · 0 评论 -
SPOJ DISUBSTR 后缀数组
题意:题目链接:https://vjudge.net/problem/SPOJ-DISUBSTR 求一个字符串中不相同的子串的个数思路:后缀数组水题代码:#include <bits/stdc++.h> using namespace std; typedef long long LL; const int MAXN = 1005; const int INF = 0x3f3f3f3f;int t原创 2017-09-22 14:40:04 · 254 阅读 · 0 评论 -
POJ 2774 (最长公共子串)后缀数组+二分
题意:题目链接:http://poj.org/problem?id=2774 求两个字符串中最长的公共子串思路:将两个串合并成一个,然后二分长度,判断时要看同一组中属于前一串的后缀喝属于后一串的后缀是否都存在。代码:#include <cstdio> #include <cstring> #include <algorithm> using namespace std; typedef long原创 2017-09-22 15:21:56 · 419 阅读 · 0 评论 -
HDU 5769 后缀数组+二分
题意:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5769 求一个字符串中包含字符x的不同子串有多少个思路:处理出height数组,对于每个后缀i,二分得出i之后的第一个字符x的位置,max(x,sa[i]+height[i])之后的位置结尾得到的字符串都是唯一的,相见代码。代码:#include <bits/stdc++.h> using nam原创 2017-09-22 15:57:30 · 519 阅读 · 0 评论