关于字符串回文的Manacher算法
对于Manacher
算法自己研究了一会,总算是理解了其中的含义,乘着有时间正好可以过来记录下:
思路:
- 将字符串变成奇数,通过加非字符串里面的符号表示,不过一般都是加的
#
- 找出以当前索引为中点的最长回文数长度,并且记录,例如:
#a#b#a
,这个字符串所对应的长度便是[1,2,1,2,1,1],因为在#
的时候组成不了回文,所以#
这里是1,而到了a
这里,因为#a#
组成了回文,所以a
的最长回文字符串长度是2,以此类推 - for循环开始比较,在这里一般来讲是首先需要定义一个字符串的边界变量,以防止数组越界,另外一个就是最长回文字符串的中点坐标,以此类推就可以
代码:
将填充符号计入到需要匹配的的字符串中