官方题解不是很详细 首先有一个结论:若A=pa+sa B=pb+sb A.B串循环同构,则可以构造一个可行方案(pa,sb) (sa,pb)中有一个是最长匹配,这个不难用反证法证明. 对于s1,s2串,我们穷举s1的每一个后缀i,设s1[i..i+len-1]=s2[0..len-1] len是最长匹配 那么不难得到,如果存在k使得k<=len且s1[0..i-1]=s2[k..k+i-1] 那么,两串前缀s1[0..i+k-1]为循环同构 因此我们预处理w[i][j]表示s1[0..i]=s2…