网上的题解都是后缀数组,我来个后缀自动机题解. 建好后缀自动机后由于后缀自动机是单向的,那么dfs一遍记录各节点的size,要保证一个节点只经过一次才是O(n),否则是O(n^2).表示这个节点及后面还有几个节点.然后再来个ans数组,再dfs一次.这次如果走的是题目要的字母(记c),那么ans[x]+=siz[to],因为to能到的节点对应的子串都有c.如果走的不是c,那么ans[x]+=ans[to].ans其实就表示该节点以后能有几个能有c的子串.同样ans只能走一次,否则是n^2的.那么…