回文自动机的一点思考

断了今生、忘了曾经 提交于 2019-11-29 04:25:43

今年多校有这样一道题:传送门

做法如果直接dfs暴力跳fail指针,跳到一个标记了的结点就break,跑得很快,后面有群友说只需要跳一次fail指针即可。
当时没怎么想明白,今天来看又想了一下,发现证明并不难,只需要分几种情况即可,我就直接放图吧:

总结:

在许多的自动机中都存在fail指针,并且结点与其指向结点通常含有包含关系,所以fail指针是求解子串问题强有力的工具。
平时我们暴力跳fail复杂度一般为\(O(n^2)\)的,但在回文自动机中,因为对称性,只需跳一次即可,复杂度就变为\(O(n)\)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!