2017-02-14 47 views
1

我試圖做一個函數,找到字符串中最長的迴文沒有使用for循環。如果有相同長度的迴文,則會產生按字母順序排列的迴文。例如:「」=>「」,「bcd」=>「b」,「acaba」=> aba沒有循環的字符串中最長的迴文Python 3

我發現這個溢出是類似的,除了它用於循環,它找到第一個迴文。

def palindromes(text): 
    results = [] 

for i in range(len(text)): 
    for j in range(0, i): 
     chunk = text[j:i + 1] 

     if chunk == chunk[::-1]: 
      results.append(chunk) 

return text.index(max(results, key=len)), results 

我想用的方法是檢查每個子字符串是否等於它的反向子字符串[:: - 1]。但我不知道如何獲得每個可能的子字符串。我知道遞歸我可以刪除字符串的最後或第一個位置,但不會檢查中間的子字符串。

+0

提示:字符串's'中最長的迴文或者是's'本身,或者是's [: - 1]中最長或者s'中最長的'[1:]' – Julien

回答

0

遞歸可以簡化要麼比賽本身,或檢查遞歸開頭的字符串沒有最後一個字符或字符串的結尾沒有第一個字符:

def palindromes(text): 
    if text == text[::-1]: 
     return len(text) 
    return max(palindromes(text[:-1]), palindromes(text[1:])) 

的複雜性是相當糟糕 - 指數,雖然。

+0

s你的意思是文字嗎?我試過這個,但「acaba」=>「caba」 – pewnienewbie

+0

嗯它似乎仍然返回「acaba」=>「caba」 – pewnienewbie