返回

后缀自动机

发布时间:2022-11-07 19:43:16 201
# c++# ios

后缀自动机

// Created by CAD
#include
using namespace std;

const int maxn=1e6+5;
namespace sam{
int len[maxn<<1],link[maxn<<1],Next[maxn<<1][26];
int sz,last;
void init(){ //记得初始化
sz=last=0;
len[0]=0,link[0]=-1;
}
void insert(char c){ //插入字符
int now=++sz;
len[now]=len[last]+1;
int p=last;
while(~p&&!Next[p][c-'a']){
Next[p][c-'a']=now;
p=link[p];
}
if(p==-1) link[now]=0;
else{
int q=Next[p][c-'a'];
if(len[p]+1==len[q]) link[now]=q;
else{
int clone=++sz;
len[clone]=len[p]+1;
memcpy(Next[clone],Next[q],sizeof(Next[q]));
link[clone]=link[q];
while(~p&&Next[p][c-'a']==q){
Next[p][c-'a']=clone;
p=link[p];
}
link[q]=link[now]=clone;
}
}
last=now;
}
}

int main() {
ios::sync_with_stdio(false);
cin.tie(0);
sam::init();
string s;cin>>s;
for(auto i:s) sam::insert(i);

return 0;
}

CAD加油!欢迎跟我一起讨论学习算法


特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线
下一篇
后缀自动机做题技巧 2022-11-07 19:15:34