![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
后缀数组
kalilili
双眼闭三年。
展开
-
URAL 1297. Palindrome(输出最长回文子串--后缀数组)
Input The input consists of a single line, which contains a string of Latin alphabet letters (no other characters will appear in the string). String length will not exceed 1000 characters. Outpu原创 2015-03-19 19:59:28 · 654 阅读 · 0 评论 -
POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)
题意: 有N(1 “主题”是整个音符序列的一个子串,它需要满足如下条件: 1.长度至少为5个音符 2.在乐曲中重复出现(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值。) 3.重复出现的同一主题不能有公共部分。 思路:是要求最长不重叠重复的子串,如果没有不重叠的限制条件,那么height中的最大值即可 现在对于这题需要二分出答案,二分出最长重复子串原创 2015-03-17 20:22:50 · 743 阅读 · 0 评论 -
POJ 2046 Power Strings(连续重复串重复次数--后缀数组)
连续重复串:如果一个字符串L 是由某个字符串S 重复R 次而得到的,则称L 是一个连续重复串。R 是这个字符串的重复次数。 题意:求连续重复串的最大重复次数R 思路:当然可以用kmp。 用后缀数组的话,穷举字符串S 的长度k,然后判断是否满足。判断的时候,先看字符串L 的长度能否被k 整除,再看suffix(0) suffix(k)的最长公共前缀是否等于n-k。在询问最长公共前缀原创 2015-03-19 22:00:29 · 839 阅读 · 0 评论 -
POJ 3693 Maximum repetition substring (后缀数组+RMQ 求重复最多的连续子串)
给定一个字符串,求重复次数最多的连续重复子串。 先穷举长度L,然后求长度为L 的子串最多能连续出现几次。首先连续出现1 次是肯定可以的,所以这里只考虑至少2 次的情况。假设在原字符串中连续出现2 次,记这个子字符串为S,那么S 肯定包括了字符r[0], r[L], r[L*2],r[L*3], ……中的某相邻的两个。所以只须看字符r[L*i]和r[L*(i+1)]往前和往后各能匹配到多远原创 2015-03-23 22:48:44 · 505 阅读 · 0 评论 -
POJ 3261 Milk Patterns (离散化+后缀数组 k次最长重复子串(可重叠))
题意:给定一个字符串,求至少出现k 次的最长重复子串,这k 个子串可以重叠。 思路:仍是二分出长度再以长度把height数组分类,再判是否存在k次 因为只有20000个数,但是数的范围是1000000 所以先离散化后基数排序效率将大大提高。 //Accepted 860K 47MS #include #include #include #include using namespace std原创 2015-03-17 22:09:15 · 550 阅读 · 0 评论 -
SPOJ 694. Distinct Substrings (不相同的子串的个数--后缀数组)
题意:给定一个字符串,求不相同的子串的个数。 思路:子串的总个数是n*(n+1)/2 现在用height数组解决所以把子串的个数看成是以i字符串开头的子串的个数的和,那么总个数减去sum(height[i]),即是答案 因为height[i]是sa[i]与sa[i-1]后缀的相同前缀的长度,那么以前面那种计算子串的方式,也就是重复了height[i]个子串 //Distinct Subst原创 2015-03-18 19:57:41 · 630 阅读 · 0 评论 -
POJ 3415 Common Substrings(长度不小于k 的公共子串的个数--后缀数组+单调栈优化)
题意:给定两个字符串A 和B,求长度不小于k 的公共子串的个数(可以相同)。 样例1: A=“xx”,B=“xx”,k=1,长度不小于k 的公共子串的个数是5。 样例2: A =“aababaa”,B =“abaabaa”,k=2,长度不小于k 的公共子串的个数是22。 思路: 如果i后缀与j后缀的LCP长度为L, 在L不小于K的情况下, 它对答案的贡献为L - K + 1. 于是原创 2015-03-31 22:15:29 · 762 阅读 · 0 评论 -
POJ 2774 Long Long Message(最长公共子串 -初学后缀数组)
后缀数组的两篇神论文: 国家集训队2004论文集 许智磊 算法合集之《后缀数组——处理字符串的有力工具》 很多人的模版都是用论文上的 包括kuangbin的模版:(DA算法) 模版中比较难理解的地方有两点1.按关键词排序 2.把字符串长度增加一位 按关键词排序的意思其实是基数排序中相当把两位数排序时先排个位,再排十位 这里也一样先排后2^k原创 2015-03-17 16:14:13 · 771 阅读 · 0 评论