2016-12-31 37 views
-1

嘿大家我已經在Python 2.7在掙扎中最長的迴文算法的挑戰。我正在接近但有一個小錯誤,我無法弄清楚。我有迴文工作,但不能得到最長的迴文打印正確,要麼給我一個字符緩衝區錯誤或打印0停留在最長的迴文算法在Python 2.7

def palindrome(string): 
    string = "".join(str.split(" ")).lower() 
    i = 0 
    while i < len(string): 
     if string[i] != string[(len(string) - 1) - i]: 
      return False 

     i += 1 
    return True 
print palindrome("never odd or even") 

def longest_palindrome(string): 
    best_palindrome = 0 
    i1 = 0 
    while i1 < len(string): 
     length = 1 
     while (i1 + length) <= len(string): 
      substring = string.split(i1,length) 
      if palindrome(substring) and (best_palindrome == 0 or len(substring) > len(best_palindrome)): 
       best_palindrome = substring 
      length += 1 
     i1 += 1 
    return best_palindrome 
print longest_palindrome("abcbd") 
+0

請解釋「最長的迴文算法挑戰」是什麼,以便我們能夠理解你在做什麼。 –

+2

您的迴文功能正在做一些無稽之談。 –

+0

我覺得@OP正試圖實現[Manacher的算法(https://en.wikipedia.org/wiki/Longest_palindromic_substring) – shash678

回答

1

據我所知,你的第一個方法是檢查一個字符串是否是迴文否則你的第二種方法是找到最長的迴文。

迴文代碼,您張貼總是返回真無論輸入什麼是由於

string = "".join(str.split(" ")).lower() 

返回一個空字符串。我改變了你的這部分代碼來

string = string.replace(" ", "").lower() 

,我相信讓你刪除所有空格,使串入小寫的預期效果。

接下來,你的第二個方法應該通過輸入字符串的所有可能的子串來循環,檢查是否)的迴文和b)如果是長於以往最大的迴文。

字符串「doloa」一個例子是:

doloa; is palindrome=false; 

dolo; is palindrome=false; 

dol; is palindrome=false; 

do; is palindrome=false; 

d; is palindrome=true; is bigger than previous large palindrome=true; 

oloa; is palindrome=false; 

olo; is palindrome=true; is bigger than previous large palindrome=true; 

你會繼續這個循環整個字符串,並在年底,你的變量「best_palindrome」應包含最大的迴文。

我定你的代碼,我相信這應該工作(請告訴我,如果這是你想要的輸出)。

def palindrome(string): 
    comb = string.replace(" ", "").lower() 
    # print(comb) 
    # print(len(comb)) 
    i = 0 
    while i < len(comb): 
     # print(comb[i] + ":" + comb[(len(comb) - 1) - i] + " i: " + str(i) + ", opposite: " + str((len(comb) - 1) - i)) 
     if comb[i] != comb[(len(comb) - 1) - i]: 
     return False 
     i += 1 
    return True 

print palindrome("never odd or even") 

def longest_palindrome(string): 
    best_palindrome = "" 
    i1 = 0 
    while i1 < len(string): 
     length = 0 
     while (i1 + length) <= len(string): 
      substring = string.replace(" ", "").lower() 
      substring = substring[i1:len(substring)-length] 
      #print("Substring: " + str(substring)) 
      if palindrome(substring) and (best_palindrome == "" or len(substring) > len(best_palindrome)): 
       best_palindrome = substring 
      length += 1 
     i1 += 1 
    return best_palindrome 
print longest_palindrome("bgologdds") 

注:我改變一些變量的名字,我還添加了一些打印字符串進行調試。您可以刪除它們或取消註釋以備將來調試。

+0

謝謝你的完美工作 – Jives