关于本题用AC自动机匹配,记录每个位置在tire图上的匹配节点用栈保存
那么问题来了
int now = 0;
for(int i=1;i<=len;i++)
{
now = zi[now][a[i]-'a'];//跳到tire树上对应的节点去
f[++top] = now; st[top] = i;
if( last[now] )//有单词
top -= last[now]; now = f[top];
}
为什么只需要关注last[now]?为什么不需要往上跳fail哇
根节点到now的路径不是单词,不意味着根节点到now路径的后缀不是单词呀...
还是说我个憨憨完全没理解ac自动机