制作字谜:临时字谜长度减法

2024-04-30 03:03:39 发布

您现在位置:Python中文网/ 问答频道 /正文

问题:给定两个长度可能相同或不相同的字符串,确定要使它们成为变音图所需的最小字符删除数。任何字符都可以从字符串中删除。在

我的方法:

def anagramlength(string1,string2):
    temp = []
    if len(string1)> len(string2):
        x= string2
        y=string1
    else:
        x = string1
        y=string2
    for c in x:
        if c in y:
            temp.append(c)
        else:
            continue
    return (len(x)- len(temp)) + len(y)- len(temp)

使用测试用例:

^{pr2}$

我得到28,而正确答案是40。你能帮我找出我的程序出了什么问题吗?在


Tags: 方法字符串inforlenifdef字符
3条回答

通过使用字典存储每个字符串的字母,您的算法可以简化为线性时间。在

def anagramlength(string1,string2):
    difference = {}


    for letter in string1:
        if letter not in difference:
            difference[letter] = 0
        difference[letter] += 1

    for letter in string2:
        if letter not in difference:
            difference[letter] = 0
        difference[letter] -= 1

    return sum(abs(n) for n in difference.values())

更正代码:

def anagramlength(string1,string2):
    temp = []
    if len(string1)> len(string2):
        x= string2
        y=string1
    else:
        x = string1
        y=string2
    lenb=len(y)
    for c in x:
        if c in y:
            temp.append(c)
            y = list(y)
            y[y.index(c)]= None
    return (len(x)- len(temp)) + lenb - len(temp)

这可以通过使用字典来存储字符来简化。在

def anagramlength(str1,str2):
    dict = {}


    for char in str1:
        if char not in dict:
            dict[char] = 0
        dict[char] += 1

    for char in str2:
        if char not in dict:
            dict[char] = 0
        dict[char] -= 1

return sum(abs(n) for n in dict.values())

相关问题 更多 >