我有两个字符串:
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))
答案 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))