回文自动机的一点思考

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

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

**总结: **

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

posted @ 2019-09-03 13:02  heyuhhh  阅读(214)  评论(0编辑  收藏  举报