将S1与S2用#号拼接在一起形成S串 将S3与S串跑KMP求出S3在S串中每次出现的位置l[i] 对于S串每个后缀i,求出f[i]表示该串不包含S3串的最长前缀 然后求出S串的后缀数组 先从小到大扫描后缀数组, 同时维护一个tmp表示S2中的串与现在的串的最长公共前缀,且没有出现S3, 如果碰到一个S1的后缀,那么更新ans=max(ans,min(f[sa[i]],tmp)) 如果碰到一个S2的后缀,那么更新tmp=max(tmp,f[sa[i]]) 然后将tmp与height取一个最小值 最…