[英]How do I compare two strings to return number of differences?
我有两个字符串:
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))
这是一个非常简单的 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))
你可以很容易地通过集合来完成,但它会忽略重复字符的差异和位置差异,如 str1: "password" 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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.