如果一个字符串可以被拆分为 的形式,其中 和 是任意非空字符串,则我们称该字符串的这种拆分是优秀的。
一个字符串可能没有优秀的拆分,也可能存在不止一种优秀的拆分。
现在给出一个长度为 的字符串 ,我们需要求出,在它所有子串的所有拆分方式中,优秀拆分的总个数。这里的子串是指字符串中连续的一段。
以下事项需要注意:
- 出现在不同位置的相同子串,我们认为是不同的子串,它们的优秀拆分均会被记入答案。
- 在一个拆分中,允许出现 。
- 字符串本身也是它的一个子串。
Constraints
$ 1 \leq T \leq 10$ ,
Solution
我们以 为分界线,只需求出分界线左右的 串然后组合即可。
考虑枚举长度 ,对于两个位置 与 ,求出向前的最长公共后缀和向后的最长公共前缀(二分 + 哈希),组合可以得到一个长度为 的 串。具体的结尾有效区间为 ,需要注意边界。
时间复杂度 。
Code
1 |
|