suffix_array(后缀数组)
来源:互联网 发布:linux 查看文本命令 编辑:程序博客网 时间:2024/05/17 06:26
#include<iostream>#include<vector>#include<string>#include<algorithm>using namespace std;vector<int> grade; vector<int> sa;vector<int> tempg;int k;string s;bool cmpsa(int a, int b){ if (grade[a] != grade[b]) return grade[a] < grade[b]; else { int nexa = a + k <= s.size() ? grade[a + k] : -1; int nexb = b + k <= s.size() ? grade[b + k] : -1; return nexa < nexb; }}void getsa(){ sa.clear(); grade.clear(); tempg.clear(); for (int i = 0; i <= s.size(); i++) { sa.push_back(i); grade.push_back(i < s.size() ? s[i] : -1); } for (k = 1; k <= s.size(); k *= 2) { sort(sa.begin(), sa.end(),cmpsa); tempg = grade; tempg[sa[0]] = 0; for (int i = 1; i <= s.size(); i++) { tempg[sa[i]] = tempg[sa[i - 1]] + (cmpsa(sa[i - 1], sa[i]) ? 1 : 0); } grade = tempg; }}int main(){ while (cin >> s) { getsa(); for (int i = 0; i < sa.size(); i++) cout << sa[i] << endl; } return 0;}
0 0
- suffix_array(后缀数组)
- suffix_array(后缀数组) 学习笔记
- 后缀数组(倍增)
- 后缀数组(详细)
- 后缀数组(详细)
- 后缀数组(转载)
- 后缀数组(不完善)
- 后缀数组(poj3729)
- poj3581_Sequence(后缀数组)
- 后缀数组(一)
- bzoj1031(后缀数组)
- POJ1743(后缀数组)
- 后缀数组(一)
- 后缀数组(SA)
- 后缀数组(倍增)
- 后缀数组(UVa11107)
- 后缀数组(修订版)
- UOJ #35 后缀排序(后缀数组)
- partition分区
- 【vb.net机房收费系统】之sqlhelper
- Spring MVC基础知识及实例
- 六、FPGA设计之并转串设计
- uva 11995 I Can Guess the Data Structure 数据结构
- suffix_array(后缀数组)
- Linux下jdk环境配置
- 搜狐博客登录js加密算法
- 提高第26课时,实践1,项目1-有序数组中插入数据(函数版)
- 常用查看Linux系统信息命令
- static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- 第八周项目4-String类的构造
- 测试人员的角色
- RTP/RTCP流媒体同步机制