
后缀数组
_奶酪
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【算法笔记】图文结合彻底搞懂后缀数组
目录1.后缀数组sa[]的求法O(nlogn)2.rank数组的求法O(n)3.height数组的求法O(n+)可以先看文章末的参考博客!!字符串:aabaaaab,读入时下标从0开始 三个基本数组:(1)sa[i]=j:第i名的后缀是[j,n)(i从1开始,j从0开始)(2)rankk[i]=j:[i,n)的后缀排第j名(i从0开始,j从1开始)(3)he...原创 2019-08-04 12:48:34 · 768 阅读 · 0 评论 -
【2019“新智认知”杯: C】CSL的密码(求长度≥k的不同子串数---后缀数组)
题目地址:https://ac.nowcoder.com/acm/contest/551/C题目:给出字符串长度n和k,求字符串中长度≥k的不同子串数目解题思路:用到后缀数组算法中的height数组,height[i]表示排名第i的后缀字符串和第i-1名的后缀字符串的最长公共前缀长度,如图:若要求不同的子串数目,每个后缀字符串ss对结果的贡献都是len(ss)-它对应...原创 2019-08-04 13:06:04 · 327 阅读 · 0 评论 -
【HDU4691】Front compression(求给定两个子串/后缀的最长公共前缀---后缀数组+st表+一点思维)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4691题目:给定字符串和它的一些子串,求给出的相邻两个子串之间的最长公共前缀长度,然后再做一些变换。解题思路:height[i]表示排名i的后缀和排名i-1的后缀之间的最长公共前缀长度,且suffix(j)和suffix(k)的最长公共前缀为height[rank[j]+...原创 2019-08-04 18:02:41 · 904 阅读 · 0 评论 -
【POJ2774】Long Long Message(求两个字符串的最长公共子串----后缀数组)
题目地址:http://poj.org/problem?id=2774题目:给出两个字符串,求他们的最长公共子串的长度解题思路:后缀数组经典题。两个字符串通过一个特殊字符连接在一起,求这个新的字符串的sa数组和height数组求最长公共子串转化为求新字符串的两个排名相邻的后缀的LCP问题(因为是LCP,所以这两个后缀的排名一定是紧挨着的,不需要st表)并且需要保证...原创 2019-08-05 09:54:01 · 598 阅读 · 0 评论 -
【HDU6194】string string string(统计出现k次的子串数目---后缀数组+st表)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6194题目:求出现k次的子串数目之和解题思路:k=1 特殊处理:ans = n * (n + 1) / 2;for(int i = 1; i <= n; i++) ans -= max(height[i], height[i + 1]);k≠1,每次查...原创 2019-08-18 12:42:25 · 251 阅读 · 0 评论 -
【2018焦作网络赛】Strings and Times(出现次数在[L,R]的子串数目---后缀数组+st表)
题目地址:https://nanti.jisuanke.com/t/A2018题目:求字符串出现次数在[L,R]的子串数目解题思路:求出至少出现L次的子串数目ans1,和至少出现R+1次的子串数目ans2,最终结果为ans1-ans2。for(int i = 1; i <= n - k + 1; i++){ int l = i, r = i + k - 2;...原创 2019-08-18 12:50:31 · 254 阅读 · 0 评论 -
【HDU5008】Boring String Problem(后缀数组+二分查找+st表)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5008题目:给出字符串s,找出字符串中字典序第k小的子串第一次出现的位置解题思路:height数组中,排名第i的后缀对子串的贡献(不包含重复的子串):该后缀中的所有长度大于height[i]的前缀。而且这样排出来的子串正好是有序的,字典序从小到大。二分查找字典序第k小的子串所在...原创 2019-08-30 11:45:07 · 489 阅读 · 0 评论 -
【HDU6704】K-th occurrence(后缀数组+二分+st+主席树)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6704题目:字符串s长度为n,q个询问。每个询问给出L,R,k,问[L,R]内的字符串第k次出现的位置解题思路:由L,R可以确定目标子串所在的后缀排名rank,目标子串长度为len = R-L+1,所以在rank上面找到一个最远的rank1,使得[rank1,rank]区间的L...原创 2019-08-30 11:56:57 · 332 阅读 · 0 评论