【发布时间】:2015-01-02 08:50:28
【问题描述】:
我知道如何判断一个字符串是否是回文
string1 == string1.reverse
虽然在一个字符串中有多个回文,但这有点困难
"abcdxyzyxabcdaaa"
在上面的字符串中,有4个长度大于1的回文
"xyzyx", "yzy", "aaa" and "aa"
在这种情况下,最长的回文是“xyxyx”,长度为 5 个字符。
我将如何解决这个问题。
我知道 array#combination 方法,但在这种情况下不起作用。
我正在考虑实现这样的东西
def longest_palindrome(string)
palindromes = []
for i in 2..string.length-1
string.chars.each_cons(i).each {|x|palindromes.push(x) if x == x.reverse}
end
palindromes.map(&:join).max_by(&:length)
end
【问题讨论】:
-
您需要实现类似 Manacher 的算法来解决这个问题。 en.wikipedia.org/wiki/Longest_palindromic_substring
-
您不需要使用花哨的线性时间算法。使用简单的 O(n^2) 算法会更容易(也许就足够了)。
标签: ruby string substring reverse palindrome