2016-11-07 1 views
1

私は最長の奇妙な長さの回文を見つけることを試みていますが、私が書いたコードは完全な回文を与えるものではなく、ちょうどその一部です。どんな助けも素晴らしいだろう!奇数長パインドームを取得

def get_odd_palindrome_at(s, index): 
    ''' (str, int) -> str 

    > get_odd_palindrome_at('tbababt', 3) 
    'tbababt' 
    > get_odd_palindrome_at('color', 2) 
    'olo' 
    ''' 

    palindrome = s[index] 
    i = index 

    for char in s: 
     if s[i - 1] == s[i + 1]: 
      palindrome = s[i - 1] + palindrome + s[i + 1] 
      i = i + 1 

    return palindrome 
+0

私はあなたが 'sをしたいと思います[インデックスを - I] 'と' [index + i] 'を返します。そうでなければ' i = i + 1'は常に 'i'を右に移動します –

答えて

0

indexからi距離を作成しない範囲外のループに確認してください。最後に、最終値がiである場合にのみ結果文字列を作成します。

def get_odd_palindrome_at(s, index): 
    for i in range(1, index+1): 
     if index + i >= len(s) or s[index - i] != s[index + i]: 
      i -= 1 
      break 

    return s[index-i:index+i+1] 

あなたは、コードを少し単純化し、2つの変数を使用でき、また:すべての反復でそれをやってには使用することはありません

def get_odd_palindrome_at(s, index): 
    i = index 
    j = index 
    while i >= 0 and j < len(s) and s[i] == s[j]: 
     i -= 1 
     j += 1 

    return s[i+1:j] 
0

あなたはiたびに移動するので、あなたは、両方の方向にインデックスを拡張しますが、右にするたびに、あなたの3-手紙-円を移動しないでください。あなたはインデックスを維持する必要があり、すべての時間がインデックスからインデックスの等しい増加量を追加したり、substruct:だから事実上だけでインデックスを保存し、マージンをインクリメント

How you want it to be: 

c o l o r 
    - i - 
- i - 

How it's doing: 

c o l o r 
    - i - 
    - i - 

を。また、あなたはそう、唯一index余白ではなく、文字列を反復処理したい:

def get_odd_palindrome_at (s, index): 

    palindrome = s[index] 

    for i in range(index): 
     if s[index - i] == s[index + i]: 
      palindrome = s[index - i] + palindrome + s[index + i] 
     else: 
      break 

    return palindrome