$Manacher$ .
考虑枚举 $X,Y$ 两个回文串的分界位置,不能以首尾的 ‘#’ 作为分界位置,否则 $X,Y$ 长度可以为 $0$ .
利用 $Manacher$ ,位置 $i$ 作为分界位置的贡献就是左边能覆盖到 $i$ 的最大长度加上右边能覆盖到 $i$ 的最大长度.
以找左侧最优位置为例,从左往右扫描,同时维护一个当前处理到的右边界 $k$ .
扫描到第 $i$ 位时,就把 $k+1\sim i+R(i)-1$ 这一段的最优位置全部更新为 $i$ ,然后将右边界更新为 $i+R(i)-1$ .
右边界只会向右移动,所以时间复杂度为 $O(n)$ .
右侧最优位置的处理方法同理.
1 |
|