摘要: 题意:给出一个串,求重复次数最多的连续重复子串分析:比较容易理解的部分就是枚举长度为L,然后看长度为L的字符串最多连续出现几次。既然长度为L的串重复出现,那么str[0],str[l],str[2*l]……中肯定有两个连续的出现在字符串中。那么就枚举连续的两个,然后从这两个字符前后匹配,看最多能匹配多远。即以str[i*l],str[i*l+l]前后匹配,这里是通过查询suffix(i*l),suffix(i*l+l)的最长公共前缀通过rank值能找到i*l,与i*l+l的排名,我们要查询的是这段区间的height的最小值,通过RMQ预处理达到查询为0(1)的复杂度,设LCP长度为M, 则答案 阅读全文
posted @ 2013-09-06 21:54 z.arbitrary 阅读(965) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个字符串,求不相同的子串的个数分析:每个子串一定是某个后缀的前缀,那么原问题等价于求所有后缀之间的不相同 的 前 缀 的 个 数 。如 果 所 有 的 后 缀 按 照 suffix(sa[1]), suffix(sa[2]),suffix(sa[3]), ...... ,suffix(sa[n])的顺序计算,不难发现,对于每一次新加进来的 后缀 suffix(sa[k]), 它将产生 n-sa[k] 个新 的前缀。但 是其中有height[k]个是和前面的字符串的前缀是相同的。所以 suffix(sa[k])将“贡献”出 n-sa[k]- height[k]个不同的子串。累加后便是 阅读全文
posted @ 2013-09-06 14:00 z.arbitrary 阅读(228) 评论(0) 推荐(0) 编辑