建议将数据范围调至 2e6 卡掉 hash(

· · 题解

首先考虑两个串的最长公共子串不等于 0 的情况。

这个时候直接先将串删至最长公共子串然后再扩展就是最优的,问题转化为求两个串的最长公共子串,SAM 即可。

再考虑两个串的最长公共子串等于 0 的情况。

题目要求了操作前后的序列都不能为空,所以你不能直接删空然后去扩展。

这时候两个串的所有数字全都不相同,所以我可以先将串删至只有一个数是不劣的。

然后再考虑从这一个数去寻找旁边最近的出现的目标串的字符再去扩展,bfs 即可。

Code