题意 给一个长度为\(n\)的字符串\(s\),再给定一个\(w\),问对于所有的\(i\in [1,n-w+1]\),\(s[i..i+w-1]\)有多少个不同字串.\(n,w\le 10^5\). 分析 统计不同子串个数的问题可以使用后缀树.一个字符串的后缀树的总边长就是这个字符串的不同子串个数.解决这个问题,一个显然的方法就是划窗法,即每次删掉第一个字符,加入最后一个字符,再统计后缀树上边长的变更即可. 很明显这个方法需要一个在线的后缀树构建算法,可以用Ukkonen来做.那么我们如何求出…