8.17模拟赛
T3.模板串
依然KMP+DP解决。
可以发现这样一个事情,模板串一定是原串的前缀和后缀,这就想到了kmp解决。
设f[i]为S的前缀i的最短模板串长,g[i]为长度为i的模板串可以覆盖到的位置。
f[i]一定可以等于i,但是可能存在更优解,而这个更优解就在f[fail[i]]中,考虑重叠的情况,必须在[i-fail[i],i)中有一个f[j]==f[fail[i]],才能覆盖到i位置。
也就是g[f[fail[i]]>=i-fail[i],就可以判定f[i]=f[fail[i]]。
时间复杂度O(n)
本文来自博客园,作者:GhostCai,转载请注明原文链接:https://www.cnblogs.com/ghostcai/p/9496457.html