2017-02-14 7 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 

Iは、使用を考えていた方法は、各部分がそれに等しいかどうかをチェックすることで、逆サブだ[:: - 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

by sあなたはテキストを意味しますか?私はこれを試みたが、 "acaba" => "caba" – pewnienewbie

+0

それはまだ "acaba" => "caba" – pewnienewbie

関連する問題