后缀自动机SAM 学习笔记

不是很理解

struct deme{int len,fa,to[26];}dot[m7];
void insert(int ch){
	cnt++;
	int p=las,np=cnt;las=np;
	num[np]=1;
	dot[np].len=dot[p].len+1;
	
	while(p&&!dot[p].to[ch])dot[p].to[ch]=np,p=dot[p].fa;
	if(!p){dot[np].fa=1;return;}
	
	int q=dot[p].to[ch];
	if(dot[q].len==dot[p].len+1){dot[np].fa=q;return;}
	
	cnt++;int nq=cnt;
	dot[nq]=dot[q];
	dot[nq].len=dot[p].len+1,dot[q].fa=dot[np].fa=nq;
	while(p&&dot[p].to[ch]==q)dot[p].to[ch]=nq,p=dot[p].fa;
}
上一篇:内网渗透之获取hash身份凭证


下一篇:【转】后缀自动机