「LightOJ-1428」Melody Comparison
给定串A和串B,求串A本质不同且不包含串B的子串个数。
题解
KMP预处理出串A的每个后缀向右延伸的最远的不包含串B的位置rmax[i]
。那么对于后缀sa[i]
,它的不包含串B的前缀个数为rmax[sa[i]]
个。因为要求本质不同的子串个数,需要减去当前后缀和上一个后缀相同的前缀个数height[i]
。答案即为$ans=\sum_{i=1}^nrmax[sa[i]]-min(height[i],rmax[i])$。
代码
1 |
|