枚举循环节的长度 $l$,称字符串的 $0,l,2l,\ldots$ 位置为关键位置,则每个合法子串恰好包含 $k$ 个关键位置,这 $k$ 个位置将子串分为 $k+1$ 节,记为 $t_0t_1t_2\ldots t_k$。则一个子串合法,当且仅当 $t_1=t_2=\cdots =t_{k-1}=t_kt_0$。注意到我们可以通过求 LCP/LCS 来得到 $t_0$ 和 $t_k$ 的最长长度,并统计子串个数。用后缀数组进行子串比较和求 LCP/LCS 即可。
时间复杂度 $O(n\log n)$。