2012年2月3日
摘要: POJ_3261 这个题目和POJ_1743差不多,但需要求的是重复至少K次的子串。 我们可以通过二分子串的长度k来做,这时就将题目变成了是否存在重复次数至少为K次且长度不小k的字符串。首先我们可以把相邻的所有不小于k的height[]看成一组,这组内有多少个字符串,就相当于有多少个长度至少为k的重复的子串。 之所以可以这么做,是因为排名第i的字符串和排名第j的字符串的最长公共前缀等于height[i],height[i+1],...,height[j]中的最小值,所以把所有不小于k的height[]看成一组就保证了组内任意两个字符串的最长公共前缀都至少为k,且长度为k的前缀是每个字符串... 阅读全文
posted @ 2012-02-03 18:35 Staginner 阅读(863) 评论(0) 推荐(0) 编辑
摘要: POJ_1743 搜到的题解基本都是说去找最长的不重叠的重复的子串,但是我一直对题目描述里面的那个const带有一点纠结,比如88 88 88 1 1 1 88 88 88 1 1 1,我觉得要按const去理解的话应该输出3的,但题解都是输出的6。不过意在练后缀数组的使用,就没有太顾及这些问题了。 这个题目关键的地方有两个:第一,重复的子串一定可以看作是某两个后缀的公共前缀,第二,把题目转化成去判定对于任意的一个长度k,是否存在长度至少为k的不重叠的重复的子串。 转化成判定问题之后,就可以二分去解答了。在验证判定是否正确时,我们可以把相邻的所有不小于k的height[]看成一组,然后去... 阅读全文
posted @ 2012-02-03 16:43 Staginner 阅读(610) 评论(0) 推荐(0) 编辑