2017-02-24 42 views
-1

问题:给定两个字符串,可能有也可能不是相同的长度,请确定使它们成为字符所需的最少字符删除次数。任何字符都可以从任一字符串中删除。Python Making Anagrams:Temp Anagram length subtraction method

我的方法:

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', '拉joipfecfinxjspxmevqx uqyalhrsxcvgsdxxkacs pbchrbvvwnvsdtsrdk')

我得到28,而正确答案是40你能帮我找到我的程序出错的地方吗?

+2

什么是你的问题?所有这些代码的作用是定义一个函数;这里没有可重现的问题。 – Prune

+0

你的尝试输出是什么? – feedMe

+0

对问题进行了更改。请再读一遍。 –

回答

0

通过使用字典来存储每个字符串的字母,可以将您的算法缩减为线性时间。

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()) 
+0

我使用的测试案例: anagramlength(“bugexikjevtubidpulaelsbcqlupwetzyzdvjphn”,“lajoipfecfinxjspxmevqxuqyalhrsxcvgsdxxkacspbchrbvvwnvsdtsrdk”) 我得到28,而你的逻辑越来越40. 你能帮我找到我的地方程序的问题呢? –

+0

您不检查重复的字符串。 e,g,'a'和'aaaaaa'应该返回5,但返回0. –

+0

我刚刚运行它,我的函数返回5,所以它确实需要处理重复。我猜这个问题是别的。 –

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)