后缀数组
前一段时间看了后缀数组,也是对着大佬们的博客研究了半天,有几个点理解了好久才明白(这就是弱者的世界吗_(:з」∠)_,再加上后来敲题时也遇到了一些坑,正好今天有时间所以写个博客来记录一下吧,方便日后写bug时查阅 本文算是自己的一篇简略的小笔记吧,如果想正经学习的话建议去看大佬们的博客哦,附上一个写的很好的链接: https://blog.csdn.net/yxuanwkeith/article/details/50636898 后缀数组求出来两个数组 sa[i] 和 rank[i] , sa[i] 表示按字典序排序排名第i的后缀的起始位置下标, rank[i] 表示以第i位为起始位置的后缀的排名,两者互逆,还有一个神奇的数组 height[i] 它表示的是排名第i的后缀和排名第i-1的后缀的LCP,有了这三个数组就可以解决大部分问题了 求法的话就是利用倍增(还有一个更优秀的DC3算法,但是好像很复杂的样子就没有看_(:з」∠)_ 首先要注意的一点就是该算法涉及的数组最好都以下标为1作为数组的第一位也就是起始位, (鬼知道为什么我敲第一道题的时候以0为起始位置怎么改怎么wa,第二天以1为起始位置重新敲了一遍就莫名其妙的a了... 实现原理概述:用 str 来表示整个字符串,我们先处理每个长度为1的子串 str[i] 对应的 sa 、 rank 的信息,然后利用 str[i] 和