【算法笔记+HDU2222】AC自动机(统计一个长字符串由多少个不同的短字符串组成)

突然发现了一篇很棒的讲解ac自动机的文章https://www.cnblogs.com/nullzx/p/7499397.html,补上!~

终于get了一个新算法(。ì _ í。) 

自己写了一遍之后结果结果是错的,debug半天才发现有个句子放错位置了,还是不够熟悉吧555

必备算法:KMP(失配时从哪里开始匹配才是最优的)+trie(字典树建树)

ac自动机的图如下:

 具体过程我就不是很想讲了,可以看b站的视频,我觉得讲的蛮明白的:传送门

几个关键点:

  • 当前节点的fail指向的是父节点fail下面和当前节点字母相同的节点:比如长字符串是shea,当和she匹配时,因为e后面没有a,所以e这个位置匹配失败,e(最左侧的e)的fail指向的是它的父节点h(最左侧的h)的fail:h(中间的h)下面的e(中间的e),然后在这个新的e(中间的e)的基础上向下匹配,可以匹配到a
  • 节点的fail指向位置的字母和节点对应的字母相同
  • 节点e的f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值