【问题标题】:how to convert a string into a palindrome with minimum number of operations?如何以最少的操作将字符串转换为回文?
【发布时间】:2011-06-11 21:19:02
【问题描述】:

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

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

【问题讨论】:

  • 也是一款不错的 Code Golf ...

标签: algorithm dynamic-programming levenshtein-distance


【解决方案1】:

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

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

【讨论】:

  • @TonyK 动态规划数组
  • 你能解释一下为什么你是从左下到右上而不是从左上到右下吗?
【解决方案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")
等等。

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

【讨论】:

    猜你喜欢
    • 2012-05-30
    • 1970-01-01
    • 2015-06-10
    • 2019-08-06
    • 2017-03-19
    • 2015-05-07
    • 2022-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多