int extend(int x,int p) {
int np=++tot;sam[np].len=sam[p].len+1;
while (p&&!sam[p].son[x]) sam[p].son[x]=np,p=sam[p].pr;
if (!p) sam[np].pr=1;else {
int q=sam[p].son[x];
if (sam[q].len==sam[p].len+1) sam[np].pr=q;
else {
int nq=++tot;
sam[nq]=sam[q];
sam[nq].len=sam[p].len+1;
sam[q].pr=sam[np].pr=nq;
while (p&&sam[p].son[x]==q) sam[p].son[x]=nq,p=sam[p].pr;
}
}
return np;
}
SAM建立模板
最新推荐文章于 2024-06-12 10:02:04 发布
本文介绍了一种基于AC自动机的节点扩展算法实现。该算法通过递归地构建失败指针并更新节点属性,实现了字符串模式匹配的功能。具体步骤包括创建新节点、更新节点长度、构建失败指针及子节点等。

242

被折叠的 条评论
为什么被折叠?



