在花了大约6到8个小时尝试消化Manacher的算法后,我准备投入工作。但是在我这样做之前,这是黑暗中的最后一枪:有人能解释吗?我不在乎代码。我希望有人来解释该算法。
这似乎是其他人似乎喜欢解释该算法的地方:http : //www.leetcode.com/2011/11/longest-palindromic-substring-part-ii.html
我知道您为什么要将字符串转换为“ abba”到#a#b#b#a#,然后我迷路了。例如,前面提到的网站的作者说,算法的关键部分是:
if P[ i' ] ≤ R – i,
then P[ i ] ← P[ i' ]
else P[ i ] ≥ P[ i' ]. (Which we have to expand past
the right edge (R) to find P[ i ])
这似乎是错误的,因为他/她曾说过,当P [i'] = 7且P [i]不小于或等于R-i时,P [i]等于5。
如果您不熟悉该算法,请参见以下更多链接:http : //tristan-interview.blogspot.com/2011/11/longest-palindrome-substring-manachers.html(我已经尝试过此方法,但是术语令人恐惧和混乱。首先,未定义某些内容。此外,变量太多。您需要一个清单来回忆一下什么变量指的是什么。)
另一个是:http : //www.akalin.cx/longest-palindrome-linear-time(祝您好运)
该算法的基本要点是找到线性时间最长的回文。可以在O(n ^ 2)中完成最小到中等的工作量。该算法被认为是相当“聪明”的,可以降低到O(n)。