在字符串中求出其最长回文子串
可能是奇回文也可能是偶回文,要考虑全面
暴力解法:(因为存在奇回文和偶回文的问题,所以不好找,有一个技巧,就是想字符串中每个字符之间添加一个符号(任意符号,也可以是字符串中的符号),然后在每个位置向两端开始扩充)
答案就是最大值/2
Manacher算法: 字符串中每个字符串之间也要加上一个字符
回文直径:从某个位置开始向两边扩的最大长度
1. 回文半径数组:arr[],以每个位置为中心能扩出来的回文半径的长度
2. 最右回文右边界R:所有回文半径中,最靠右的位置
开始位置为-1
3. 回文右边界的中心 当前回文右边界到达最右边时,是以哪个位置为中心进行扩充的
算法:
1.当前位置为 i 可能性1:i 不在回文右边界R内,则采用暴力扩充
可能性2:i 在回文右边界R内,且 i 关于回文右边界中心的对称位置 i’ 的回文中心的半径 全部在L 和 R内部
此时 i 位置的回文区域的半径和 i‘ 一样
可能性3:
可能性4:
原文地址:https://www.cnblogs.com/SkyeAngel/p/8983100.html
时间: 2024-10-09 17:53:32