回文自动机的一点思考
今年多校有这样一道题:传送门
做法如果直接dfs暴力跳fail指针,跳到一个标记了的结点就break,跑得很快,后面有群友说只需要跳一次fail指针即可。
当时没怎么想明白,今天来看又想了一下,发现证明并不难,只需要分几种情况即可,我就直接放图吧:
**总结: **
在许多的自动机中都存在fail指针,并且结点与其指向结点通常含有包含关系,所以fail指针是求解子串问题强有力的工具。
平时我们暴力跳fail复杂度一般为\(O(n^2)\)的,但在回文自动机中,因为对称性,只需跳一次即可,复杂度就变为\(O(n)\)。
重要的是自信,一旦有了自信,人就会赢得一切。