对于T4,显然可以记录 prei 为以 i 为右端点,最短合法子串的左端点,再减 1
则先设 prei=i−1 ,若 aprei=ai,则不断设 prei=preprei,直到 prei=0
同时记录 fi 为以 i 为右端点的合法子串数量,则有 fi=fprei+1(如果 prei 存在的话)
,答案就是 fi 求和
这样时间复杂度是 O(nΣ) 的,其中 Σ 是字符种类,这样复杂度对于 T4 是正确的
然而对于 CF1223F Σ=3e5 ,这时直接做会超时,观察大数据会发现问题出在即使 [0,prei] 中没有 ai 了,还在往前跳,则考虑记录 firsti 表示 ai 最早出现的位置,当 prei<firsti 时,直接设 prei=0
这样我们就可以愉快的 AC 啦!/xk