问题:如果两个字符串的长度可能相同或不同,请确定制作字谜所需的最少字符删除次数。可以从任一字符串中删除任何字符。
我的方法:
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)
使用测试用例:
anagramlength('bugexikjevtubidpulaelsbcqlupwetzyzdvjphn','lajoipfecfinxjspxmevqxuqyalhrsxcvgsdxxkacspbchrbvvwnvsdtsrdk')
我收到28
,而正确答案为40
。你能帮我找一下我的程序出错的地方吗?
答案 0 :(得分:2)
通过使用字典存储每个字符串的字母,您的算法可以缩短为线性时间。
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())
答案 1 :(得分:1)
这可以通过使用字典来存储字符来简化。
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())
答案 2 :(得分:0)
更正代码:
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)
答案 3 :(得分:0)
这是另一种不使用字典的简化解决方案:
a = input().strip()
b = input().strip()
def number_needed(a, b):
n=0
for i in a:
if i not in b or a.count(i)> b.count(i):
n += 1
a=a.replace(i, '', 1)
for j in b:
if j not in a or b.count(j) > a.count(j):
n +=1
b=b.replace(j, '', 1)
return n
print(number_needed(a, b))