后缀数组 最详细讲解
转载自 后缀数组 学习笔记 后缀数组 最详细(maybe)讲解 后缀数组这个东西真的是神仙操作…… 但是这个比较神仙的东西在网上的讲解一般都仅限于思想而不是代码,而且这个东西开一堆数组,很多初学者写代码的时候很容易发生歧义理解,所以这里给出一个比较详细的讲解。笔者自己也是和后缀数组硬刚了一个上午外加一个中午才理解的板子。 本人版权意识薄弱,如有侵权现象请联系博主邮箱xmzl200201@126.com 参考文献: 百度百科_后缀数组 %%%曲神学长的blog%%% 以下是不认识的dalao们: wsy的cnblog soda的cnblog I'MJACKY的cnblog 董雨的cnblog 特别感谢以下的两位dalao,写的特别好,打call J.K.的cnblog J_Sure的csdn 什么是后缀数组 我们先看几条定义: 子串 在字符串s中,取任意i<=j,那么在s中截取从i到j的这一段就叫做s的一个子串 后缀 后缀就是从字符串的某个位置i到字符串末尾的子串,我们定义 以s的第i个字符为第一个元素的后缀为suff(i) 后缀数组 把s的每个后缀按照字典序排序, 后缀数组sa[i]就表示 排名为i的后缀 的起始位置的下标 而它的映射数组rk[i]就表示 起始位置的下标为i的后缀 的排名 简单来说,sa表示排名为i的是啥,rk表示第i个的排名是啥 一定要记牢这些数组的意思