【发布时间】:2016-04-27 15:02:24
【问题描述】:
我需要找到将字符串转换为回文所需的最少插入次数。注意:插入可以发生在任何地方、末尾或内部。如果只是在最后,我们有一个问题here。
所以我发现这可以通过这个简单的技巧在O(N**2)时间完成:
- 让字符串为 s1。扭转它。让它成为s2。假设长度是
l。 - 现在找到 s1 和 s2 的最长公共子序列。让它的长度为
x。 - 答案是
l-x。
例如,假设s1 = abcda。因此s2 = adcba。长度为 5。最长的公共子序列是长度为 3 的 aba。因此,插入的最小数量是 5-3 = 2,这是实际答案,结果字符串 - adc bcda.
但是,我无法理解其背后的逻辑。谁能向我解释它为什么有效?
还有,有没有可能的O(N) 解决方案?
【问题讨论】:
-
看看这个link
标签: string algorithm palindrome subsequence