题意:这两个题都是给你一个字符串让你求不相同的子串的个数。
思路:因为没个子串都相当于这个字符串后缀的前缀,所以题目转换为求一个字符串所有后缀的不同前缀。
比如:ababab
sa height suff
5 0 ab
3 2 abab
1 4 ababab
6 0 b
4 1 bab
2 3 babab
suff(sa[1]):ab,能产生的前缀:ab,a
suff(sa[2]):abab,能产生的前缀:aba,abab其中:a,ab是重复的,重复的也就是height[i],
。
。
。
。
suff(sa[i])能产生的不同的前缀有n-sa[i]+1那么多个,但是suff(sa[i+1])能产生的不同的字符串:n-sa[i]+1-height[i];
只用从1到n全部加起来就是ans了。