后缀数组 倍增算法
来源:互联网 发布:aerial mac 不能播放 编辑:程序博客网 时间:2024/05/01 06:23
/* 后缀数组 倍增法 sa[i]表示从字符串sa[i]开始的后缀数组,排列第i S[sa[i]]<S[sa[i+1]] ran[i]表示从i下标开始的后缀数组,从小到大排列的名次*/#include<iostream>#include<cstdio>#include<algorithm>#include<vector>#include<cstring>#include<cmath>using namespace std;typedef long long LL;const int maxn = 10000+10;int sa[maxn];int tmp[maxn];int ran[maxn];int n, k;bool cmp(const int& i,const int& j) { if(ran[i] != ran[j]) return ran[i]<ran[j]; else { int ri = i+k<=n?ran[i+k]:-1; int rj = j+k<=n?ran[j+k]:-1; return ri<rj; }}void construct_sa(string s) { n = (int)s.size(); for (int i=0; i<=n; i++) { sa[i] = i; ran[i] = i==n?-1:s[i]; } for (k=1; k<=n; k*=2) { sort(sa, sa+n+1, cmp); tmp[sa[0]] = 0; for (int i=1; i<=n; i++) tmp[sa[i]] = tmp[sa[i-1]]+(cmp(sa[i-1], sa[i])?1:0); for (int i=0; i<=n; i++) ran[i] = tmp[i]; }}int main() { string s; cin>>s; construct_sa(s); return 0;}
0 0
- 后缀数组 倍增算法
- 后缀数组,倍增算法
- 倍增算法实现后缀数组
- 后缀数组之倍增算法
- 后缀数组倍增算法模版
- 后缀数组之倍增算法
- 后缀数组 倍增算法模板
- 后缀数组 倍增算法详解
- 倍增算法求解字符串的后缀数组
- 后缀数组,Manber & Mayer 倍增算法
- 后缀数组 倍增算法 代码详解
- 后缀数组 (由倍增算法构造)
- 后缀数组(SA倍增算法)
- 后缀数组2倍增算法读书笔记
- 后缀数组--学习笔记(倍增算法)
- 倍增算法实现后缀数组的构造
- 2倍倍增算法构造后缀数组
- 后缀数组——倍增算法
- 文章标题 CRB and His Birthday
- Activity的四种启动模式详解
- 关闭新打开的浏览器窗口
- [BZOJ3172][TJOI2013]单词(AC自动机+fail树)
- NS_ASSUME_NONNULL_BEGIN,NS_ASSUME_NONNULL_END
- 后缀数组 倍增算法
- Java面试知识点总结
- 系统提升与碎片化拓展
- 我和编程
- java小专题之API
- C# -- Unsafe Code and Pointers
- 目标跟踪(2)——背景分割器
- 欢迎使用CSDN-markdown编辑器
- 长短记忆型递归神经网络LSTM