
后缀数组
morejarphone
这个作者很懒,什么都没留下…
展开
-
HDU 5769 (后缀数组)
题目链接:点击这里 题意:求出一个串中所有不同的含有字母X的子串。后缀数组的经典运用就有求出一个串的所有子串,方法是从小到大考虑所有的saisa_i(saisa_i表示字典序第i小的后缀的下标),因为heightheight数组的含义是saisa_i和sai−1sa_{i-1}两个后缀的相同前缀长度,而saisa_i后缀有n−sain-sa_i个前缀,减去重复的heightiheight_i个前缀就原创 2016-07-29 12:54:00 · 759 阅读 · 0 评论 -
后缀数组学习笔记
要用好后缀数组要先理解里面几个数组的概念: sa[i]sa[i]表示字典序第i大的后缀下标(字典序排名依次是1−len(string)1-len(string)); rank[i]rank[i]表示下标为i的后缀字典序排名; height[i]height[i]表示sa[i]sa[i]和sa[i−1]sa[i-1]最长公共前缀的长度.一个性质: LCP(suffix[i],suffix[j])原创 2016-07-31 13:01:22 · 435 阅读 · 0 评论 -
HDU 5558 (后缀数组 二分 RMQ)
题目链接:点击这里求一个串每一个后缀和他最长匹配的他之前的后缀.题意: 给定一个串, 下标从0开始, 从这个下标之前的下标中找到一个最小下标使得这两个后缀的最长公共前缀最大, 设这个值为L. 如果存在, 下标+L, 并输出L和他之前的这个下标; 否则输出-1, 和当前下标字符的ASCLL码, 当前下标+1.后缀的前缀这个东西看着就很后缀数组, 于是就用后缀数组来搞. 第一步是找到L. 可以维护一原创 2016-08-01 17:04:14 · 653 阅读 · 0 评论