最长回文子串Manacher算法
回文串是这样的abba,ababa,就是把这个串翻转过来和原串是一样的, 最长回文子串,就是在一个长串中找到一个 子串,这个子串是 长串中的最长回文子串 简单的做法是 指定前后两个指针,判断这两个指针之间的字符串是否是回文串,并记录最大值 有一个算法是来计算最长回文子串的叫做Manacher,在网上找了半天有点没看懂,最后自己在纸上模拟一下才弄懂,说一下自己的思路 首先将字符串S用‘#’分隔,以"waawabawab" 为例子 原串S变成 S: # w # a # a # w # a # b # a # w # a # b # 然后我们用一个p数组,p[i]记录 以str[i]为中间字符的回文串向右能匹配的长度 我们人工计算一下可以看到结果是这样的 S: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 i: # w # a # a # w # a # b # a # w # a # b # p[i]: 1 2 1 2 5 2 1 4 1 2 1 8 1 2 1 6 1 2 1 2 1 可以看到 当i=4时,当前字符是‘#’,以它为中间字符能构成的最长回文串是#w#a(#)a#w# ,括号内为当前字符,所以结果是5,但是这个值用程序怎么做出呢,还要以它为中间字符向左右遍历查找吗,当然不是。。。 我们引入两个变量id和mx,