应该算是远古时期的一道题了吧,不过感觉挺经典的. 题意是给出三一个字符串s,a,b,求以a开头b结尾的本质不同的字符串数. 由于n不算大,用hash就可以搞,不过这道题是存在复杂度$O(nlogn)$的做法的. 由于要求本质不同,所以可以考虑使用后缀数组来不重复地枚举字符串. 首先用两个不同的其他字符将s,a,b拼起来求后缀数组,这样就可以知道任意两个后缀的lcp了.然后将s中所有b出现的末尾位置置1,求个后缀和suf.将s中所有后缀按名次从小到大存到一个vector里.对于s中的每个后缀,设其…