题目地址:
题意:
给一个长度不超过 1e5 的字符串,找出其中一个子串,要求该子串能够被分割成尽可能多的相同的字符串,若有多个符合要求的子串,输出字典序最小的那个。
思路:
图片不看也没关系,但这个是罗穗骞大佬在他的论文《后缀数组——处理字符串的有力工具》里的原话,然后这是他的spoj687的代码:http://paste.ubuntu.com/23923746/,本人就是参考他的代码,明白了思路的
RMQ部分只是用来求lcp的,不说了
枚举子串重复部分的长度L,然后以L为步长,枚举题目所给的字符串下标,设lcp是suffix[L]和suffix[2 * L]的公共前缀,只要 lcp>=L ,重复的字符串就出现了(首先两者相同的部分超过了suffix[L]和suffix[2 * L]的距离,然后suffix[2 * L]作为suffix[L] 的子串,重复lcp部分,就构成了一个有重复的字符串,可能这里有点绕……不懂的读者可以自己举例理解下)。
重复部分的重复次数自然就是