我将首先创建您想要将字符串转换为的回文。接下来,计算从原始字符串到您创建的回文的编辑距离,您的编辑正在替换字符串中的字符:没有插入或删除。代码看起来像
def minReplacements(original, palindrome, m, n):
# base case: we're finished processing either string so we're done
if (m == 0 or n == 0):
return 0
# The characters in the string match so find out how many replacements are
# required for the remaining characters in the strings.
if (original[m-1] == palindrome[n-1]):
return minReplacements(origininal, palindrome, m-1, n-1)
# Recurse on replacing a character in the original string
# with a character in the palindrome string
return 1 + minReplacements(origininal, palindrome, m-1, n-1)
另一方面,如果您想知道将原始字符串转换为回文字符串需要多少个字符替换、插入或删除,则使用以下代码更改上面代码的最后一行:
return 1 + min(minReplacements(origininal, palindrome, m, n-1), # insert character
minReplacements(origininal, palindrome, m-1, n-1), # replace character
minReplacements(origininal, palindrome, m-1, n)) # delete character
那时的代码如下所示:
def minReplacements(original, palindrome, m, n):
# base case: we're finished processing either string so we're done
if (m == 0): # done processing original string
return n # return the number of characters left in palindrome
if (n == 0): # done processing palindrome
return m # return the number of characters left in the original string
# The characters in the string match so find out how many edits are
# required for the remaining characters in the strings.
if (original[m] == palindrome[n]):
return minReplacements(origininal, palindrome, m-1, n-1)
# Recurse on editing a character in the original string
# with a character in the palindrome string
return 1 + min(minReplacements(origininal, palindrome, m, n-1), # insert character
minReplacements(origininal, palindrome, m-1, n-1), # replace character
minReplacements(origininal, palindrome, m-1, n)) # delete character