![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串---后缀树
小松萘
厉害的人可真多啊
展开
-
URAL - 1517 Freedom of Choice (最长公共子串)
???? ???? ???? 求两个字符串的最长公共子串。 利用height数组的时候,为了防止求出的最长子串是连接两个字符串形成的,我们在两个字符串中之间增加一个没有出现过的字符串;为了防止求得的子串是出自同一个字符串的,我们对sa[ i i]与sa[ i -1 ]的范围做出规定 还发现加了关流就会WA,不知道为什么 int n,m; char s[MAXN]; int sa[MAXN],height[MAXN]...原创 2020-02-22 14:30:43 · 93 阅读 · 0 评论 -
SPOJ - C - Distinct Substrings(不重复子串)
⛵ ⛵ ⛵ 求字符串的不重复子串有多少 容斥,每个重复的字串必定对应一个后缀,通过后缀数组求出每个后缀的最长公共前缀,减去即可,如ABAB,其中A,A是重复的,对应的后缀为ABAB,AB,这两个后缀的最长公共前缀为AB,长为2,所以减去的2意味着开头为第i 个字母的重复子串(AB,A) int n,m; char s[MAXN]; int x[MAXN];//第i位置开头的后缀第一关键字排名为x[...原创 2020-02-20 19:28:35 · 102 阅读 · 0 评论 -
算法学习---后缀数组
屯一下刚开始对后缀数组的理解 int n,m; char s[MAXN]; int x[MAXN];//第i位置的后缀第一关键字排名为x[i]//排序全部完成之后成为rank,与sa互反 int y[MAXN];//第二关键字排名为第i名的后缀开头在y[i]位置 int sa[MAXN];//第i名后缀数组的开头在sa[i]位置 int c[MAXN];//桶排辅助数组 int height[MA...原创 2020-02-20 17:26:59 · 130 阅读 · 0 评论