后缀数组与后缀自动机学习笔记

这只是个人小结,没啥大意义。

后缀数组

其实就是通过把字符串的所有后缀排序来实现一些东西。

后缀排序可以用倍增+双关键字来实现。

然后排完之后可以求出height数组,然后就可以用RMQ求LCA了。

后缀自动机

各种复杂度都是线性的,非常优秀。

原理:把具有相同right集合的状态缩成一个点,这个点内的所有状态互为后缀。

每个状态有一个minlen和maxlen,表示这个状态内的最长子串和最短子串。

构造方法:增量构造法,考虑这个字符的加入会使之前的所有后缀增加一个字符,所以可以通过调fail树来构造。

然后就是father的问题,如果l[p]+1=l[q]那么可以直接连father,否则直接连状态会出现问题,那么我们就新建立一个节点。

应用:

1、求某个子串在原串中的出现次数,在后缀节点上大标记,该子串代表的节点子树的size就是出现次数。

原文地址:https://www.cnblogs.com/ZH-comld/p/10159065.html