题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5421
这题就是学一下回文树前段插入。
下面这个是论文原话。
因此对于我们最初的板子,我们有:
改动1:原本维护上一个节点所在的回文串的节点的指针---->两个指针(重点)
由于回文串最长回文前缀和后缀是一样的,所以实际上我们只需要在左右插入的时候维护两个不同的指针,左边插入的指针维护他右边那个字符所在的最长回文串所在节点,右边插入的指针维护他上一个字符所在的最长回文串所在节点。
论文中所说的需要特判的地方是什么呢?
就是插入某个字符时,如果当前节点的回文串长度=加入的字符总数,那么将另一边的指针改成当前回文串节点即可。
这样两边的指针永远指向最长的回文串。
改动2:沿着fail匹配的过程左右不相同
左边的匹配右边,右边的匹配左边,这个的话小问题,即代码中两个get_fail的区别。
下面是针对本题的:
操作1:直接前段插入即可
操作2:直接后端插入即可
操作3:节