【发布时间】:2015-06-10 09:48:18
【问题描述】:
参考这个article on leetcode,解决最长回文子串问题有一个常见错误:
把 S 倒过来变成 S’。找到 S 和 S' 之间最长的公共子串,它也必须是最长的回文子串。
例如:
S = “abacdfgdcaba”,S' = “abacdgfdcaba”。
S 和 S' 之间最长的公共子串是“abacd”。显然,这不是一个有效的回文。
但是下面的整改我看不太懂。任何人都可以通过分步程序/示例来解释它吗?谢谢!
为了纠正这个问题,每次我们找到一个最长的公共子串候选时,我们检查子串的索引是否与反转子串的原始索引相同。
【问题讨论】:
-
我认为这不会导致任何有效的算法
-
我知道有一个 Manacher 算法,它只需要 O(N) 时间复杂度。我只是对这个解决方案感到好奇,它的整改意味着什么? @NiklasB。
-
他们建议使用 O(n^2) DP 方法来解决 LCS,然后只检查 DP 表中与表示原始字符串中相同子字符串的子字符串相对应的索引。假设我们有 LCS(i, j) = k,那么它对应于回文 if abs(i - (n - 1 - j)) + 1 = k
标签: algorithm palindrome