随笔分类 -  后缀数组

HDU2459 后缀数组+RMQ
摘要:题目大意:在原串中找到一个拥有连续相同子串最多的那个子串比如dababababc中的abababab有4个连续的ab,是最多的如果有同样多的输出字典序最小的那个这里用后缀数组解决问题:枚举连续子串的长度l , 那么从当前位置0出发每次递增l,拿 i 和 i+l 开头的后缀求一个前缀和val , 求解... 阅读全文
posted @ 2016-01-24 16:04 Love风吟 阅读(491) 评论(0) 推荐(0)
POJ 3294 二分找超过一半字符串中存在的子串
摘要:题目大意:给定n个字符串,求出现在不小于k/2个字符串中的最长子串。二分找对应子串长度的答案,将所有字符串链接成一个长字符串求后缀数组,记录每一个位置本属于第几个字符串,利用height查询的时候,根据记录的位置不断判断是否出现重复的字符串是在同一个字符串内的 1 #include 2 #in... 阅读全文
posted @ 2016-01-22 01:53 Love风吟 阅读(493) 评论(0) 推荐(0)
POJ 3415 后缀数组+单调栈
摘要:题目大意:给定A,B两种字符串,问他们当中的长度大于k的公共子串的个数有多少个这道题目本身理解不难,将两个字符串合并后求出它的后缀数组然后利用后缀数组求解答案这里一开始看题解说要用栈的思想,觉得很麻烦就不做了,后来在比赛中又遇到就后悔了,到今天看了很久才算看懂首先建一个栈,从栈底到栈顶都保证是单调... 阅读全文
posted @ 2015-05-20 01:26 Love风吟 阅读(1024) 评论(0) 推荐(1)
URAL 1297 求最长回文字符串
摘要:有种简单的方法,数组从左到右扫一遍,每次以当前的点为中心,只要左右相等就往左右走,这算出来的回文字符串是奇数长度的还有偶数长度的回文字符串就是以当前扫到的点和它左边的点作为中心,然后往左右扫这是O(n^2)的复杂度,这道题过还是没有问题的这里我主要练习的是另外的利用后缀数组加RMQ算法来解决这个问题... 阅读全文
posted @ 2015-04-04 00:03 Love风吟 阅读(213) 评论(0) 推荐(0)
POJ 3261 字符串上的k次覆盖问题
摘要:题目大意:给定一个数组,求一个最大的长度的子串至少出现过k次一个子串出现多次,也就是说必然存在2个子串间的前缀长度为所求的值通过二分答案,通过线性扫一遍,去判断出现次数,也就是说每次遇见一个height[i] , 出现次数就加1,否则重置为1 1 #include 2 #include 3 #i... 阅读全文
posted @ 2015-04-03 02:16 Love风吟 阅读(327) 评论(0) 推荐(0)
POJ 1743 后缀数组
摘要:题目大意找到一个连续的子序列连续出现过两次,且这两次不相交,只要子序列中每个数都加/减一个数得到一个新的序列,也可以看作是相同的那么也就是说这道题目可以转化成找到两个子序列,这两个子序列中每个数前后的差值是相等的所以我们可以求所有数两两之间的差值,然后根据这个值建立后缀数组后,二分答案来解决问题 1... 阅读全文
posted @ 2015-04-02 23:23 Love风吟 阅读(142) 评论(0) 推荐(0)
后缀数组的学习
摘要:学之前个人觉得还是应该看一下罗穗骞的后缀数组的国家集训队论文,虽然一开始很难看懂(反正我基本上是完全没看懂,现在距离我第一次看那篇文章也过去了1个多月,看了很多别人的论文,现在个人感觉也只是明白了一个大概),但是能理解一个大概一个数组 s ,长度为len 那么我们总是用suffix(i) 表示从i开... 阅读全文
posted @ 2015-03-31 02:37 Love风吟 阅读(227) 评论(0) 推荐(0)