给定一个字符串,求重复次数最多的连续重复子串
枚举长度$L$,然后求长度为$L$的子串最多能连续出现几次。
如果出现次数$\geq 2$,那么在枚举1
2for(int i=1;i+L<=len;i+=L)
lcp(i,i+L);
一定会遇到那个循环节的一部分。
$L=3$
a | b | a | a | b | a | a | b | a |
---|---|---|---|---|---|---|---|---|
i | i+L |
$p=lcp(i,i+L)+L$,最小循环节的长度,重复次数$p/L$。
但是不能忘记还有剩余没有匹配的数$num=L-p\%L,$,然后重现计算$lcp(i-num+1,i-num+1+L)/L+1$
复杂度$O(n+n/2+n/3…n/n=nlogn)$
代码
1 |
|