如何用最少的操作将字符串转换成回文?

时间:2011-01-19 16:21:46

标签: algorithm dynamic-programming levenshtein-distance

这是problem状态,用最少的操作数将字符串转换为回文结构。我知道它与Levenshtein distance类似  但我还不能解决它

例如,对于输入mohammadsajjadhossain,输出为8

2 个答案:

答案 0 :(得分:9)

在弦上执行Levenshtein距离及其反向。解决方案将是DP阵列对角线中从左下角到右上角的最小操作,以及正好在对角线上方和正下方的每个条目。

这是有效的,因为沿对角线的条目表示使字符串的第一个i和最后一个Ni字符相等所需的最小编辑,上面和下面的条目表示以奇数长度结束的字符串的最小值。中间(左上角)字符与任何东西都不匹配。

答案 1 :(得分:2)

您只需要计算有限数量的Levenshtein距离,每个可能的回文轴点一个。枢轴点可以是字母,也可以是两个字母之间,因此长度为n的字符串具有2n-1个枢轴点。对于每个轴心点,您可以计算轴心点之前的字符的Levenshtein距离以及它后面的字符的反向:

(m)ohammadsajjadhossain: Levensthein("", "niassohdajjasdammaho")
m ohammadsajjadhossain: Levensthein("m", "niassohdajjasdammaho")
m(o)hammadsajjadhossain: Levensthein("m", "niassohdajjasdammah")
mo hammadsajjadhossain: Levensthein("mo", "niassohdajjasdammah")
mo(h)ammadsajjadhossain: Levensthein("mo", "niassohdajjasdamma")
moh ammadsajjadhossain: Levensthein("moh", "niassohdajjasdamma")
等。

现在只需要考虑这些距离的最小值。如果速度很重要,您可以优化其中许多调用。