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

Python 如何比较两个字符串以返回差异数?,python,python-3.x,string,Python,Python 3.x,String,我有两条线: str1:“密码” str2:“pss$w#rd” 我想比较两个字符串,并想打印输出它们之间的差异总数 输出: 四, 由于在str2中删除了“a”、“o”和“$”,因此添加了“#”,因此总运算量为4 但是我的代码给出了错误的输出。我怎样才能解决这个问题?我可能错过了什么 def getMinTotalNumChanges(str1, str2): # Write your code here totalCount = 0 sorted(str1)

我有两条线:

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

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

输出:

四,

由于在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):
如果备忘录为无:
备忘录={}
如果str1==“”:
返回透镜(str2)
如果str2==“”:
返回len(str1)
如果备忘录中有(str1、str2):
返回备忘录[(str1、str2)]
如果str1[0]!=str2[0]其他0
ret=min(
#删除
1+getMinTotalNumChanges(str1[1]、str2、memo),
#编辑
diff+getMinTotalNumChanges(str1[1]、str2[1]、memo),
#插入
1+getMinTotalNumChanges(str1、str2[1:],备忘录)
)
备注[(str1,str2)]=ret
回程网
str1=“密码”
str2=“pss$wr#d”
打印(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))


你没有回答你的问题吗?以你目前的提问速度,加上你收到的反对票,我想你很快就会进入自动提问禁令。非常感谢卡马尔。这对我有用。我很感激。这个代码不起作用
getMinTotalNumChanges(“s”、“sss”)
应为2时为0。同样地,
getMinTotalNumChanges(“abc”、“acb”)
应为2时为0。另外,
getMinTotalNumChanges(“fooo”、“foaa”)
应该是1,而它应该是2。为什么要使用集合?您将丢失有关重复字符的信息。是的,它不适用于您提到的情况。它需要用户进行细化,但我希望它能起作用。此代码将只返回字符串之间的差异数!什么是“DP”?你能在这个答案中编辑一个澄清吗?