如何比较两个字符串以返回差异数?

时间:2020-11-08 14:27:14

标签: python python-3.x string

我有两个字符串:

str1:“密码”
str2:“ pss $ w#rd”

我想比较两个字符串,并想打印输出它们之间的差异总数

输出:

4

因为在str2中删除了“ a”,“ o”并添加了“ $”,“#”,所以总运算为4。

但是我的代码输出错误。我该如何解决?我可能会丢失一些东西。

def getMinTotalNumChanges(str1, str2):
    # Write your code here
    totalCount = 0
    
    sorted(str1)
    sorted(str2)
    
    for i in str1:
        for j in str2:
            if i != j:
                totalCount += 1
    return totalCount
    
# driver code
str1 = "password"
str2 = "pss$wr#d"
print(getMinTotalNumChanges(str1, str2))

2 个答案:

答案 0 :(得分:2)

这是一个非常简单的DP问题,您只需检查删除,编辑和插入的内容即可

def getMinTotalNumChanges(str1, str2, memo=None):
    if memo is None:
        memo = {}
    if str1 == "":
        return len(str2)
    if str2 == "":
        return len(str1)
    if (str1, str2) in memo:
        return memo[(str1, str2)]
    diff = 1 if str1[0] != str2[0] else 0
    ret = min(
        # deletion
        1 + getMinTotalNumChanges(str1[1:], str2, memo),
        # edit
        diff + getMinTotalNumChanges(str1[1:], str2[1:], memo),
        # insertion
        1 + getMinTotalNumChanges(str1, str2[1:], memo)
    )
    memo[(str1, str2)] = ret
    return ret


str1 = "password"
str2 = "pss$wr#d"
print(getMinTotalNumChanges(str1, str2))

答案 1 :(得分:0)

您可以轻松地按组进行设置,但是它将忽略重复字符的差异和位置差异,例如str1:“密码” str2:“ ps $ w#rd”也将为您提供结果4。请查看以下代码:

def getMinTotalNumChanges(str1, str2):
    str1_set= set(str1)
    str2_set= set(str2)
    str_intersection=str1_set.intersection(str2_set)
    diff1=str1_set - str_intersection
    diff2=str2_set - str_intersection
    total_diff= len(diff1)+len(diff2)
    return total_diff


str1 = "password"
str2 = "pss$wr#d"
print(getMinTotalNumChanges(str1, str2))

相关问题