2017-02-24 24 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)