随笔分类 -  数据结构—后缀数组

摘要:题目描述: 给定n个字符串,求出现或反转后出现在每个字符串中的最长子串。 算法标签:后缀数组 以下代码: #include<bits/stdc++.h> #define il inline #define _(d) while(d(isdigit(ch=getchar()))) using name 阅读全文
posted @ 2018-12-17 14:54 Jessiejzy 阅读(144) 评论(0) 推荐(0)
摘要:题目描述: 给定n个字符串,求在每个字符串中至少出现两次且不重叠的最长子串。 算法标签:后缀数组 以下代码: #include<bits/stdc++.h> #define il inline #define _(d) while(d(isdigit(ch=getchar()))) using na 阅读全文
posted @ 2018-12-17 14:52 Jessiejzy 阅读(284) 评论(0) 推荐(0)
摘要:题目描述: 给定两个字符串,求出长度不小于k的公共字串的个数。 算法标签:后缀数组 以下代码: #include<bits/stdc++.h> #define il inline #define LL long long #define _(d) while(d(isdigit(ch=getchar 阅读全文
posted @ 2018-12-17 14:50 Jessiejzy 阅读(178) 评论(0) 推荐(0)
摘要:题目描述: 给定两个字符串A和B,求最长公共子串。 算法标签:后缀数组 以下代码: #include<bits/stdc++.h> #define il inline using namespace std; const int N=2e5+5;char s[N],a[N],b[N]; int n, 阅读全文
posted @ 2018-12-17 14:48 Jessiejzy 阅读(148) 评论(0) 推荐(0)
摘要:题目描述: 给定一个字符串,求最长回文子串。 回文子串:如果将字符串L的某个子字符串R反过来写后和原来的字符串R 一样,则称字符串R是字符串L的回文子串。 算法标签:sa 以下代码: #include<bits/stdc++.h> #define il inline #define _(d) whi 阅读全文
posted @ 2018-12-17 14:43 Jessiejzy 阅读(155) 评论(0) 推荐(0)
摘要:题目描述: 给定一个字符串,求不相同的子串的个数。 思路: 每个子串都可以用有且仅有的一个后缀的前缀表示,于是我们可以用(n-sa[i]+1)表示所有字串个数,再用减去height[i],表示减去相同的字串。 以下代码: 代码没有编辑多组数据,oj评测为多组数据 阅读全文
posted @ 2018-12-16 20:58 Jessiejzy 阅读(110) 评论(0) 推荐(0)
摘要:后缀数组模板: il void getsa(){ int m=128;//初始m等于字符种类数 for(int i=1;i<=n;i++)c[x[i]=s[i-1]]++; for(int i=2;i<=m;i++)c[i]+=c[i-1]; for(int i=n;i;i--)sa[c[x[i]] 阅读全文
posted @ 2018-12-16 20:56 Jessiejzy 阅读(128) 评论(0) 推荐(0)