как найти самую длинную подстроку палиндрома, когда есть две подстроки максимальной длины - PullRequest
0 голосов
/ 03 июня 2018

Я решаю самую длинную проблему подстроки палиндрома из здесь .Я застрял на том, как я должен вернуть подстроку, которая появляется первой (с наименьшим начальным индексом), когда есть конфликт.

def longestPalindrome(A):
    pal_string = ''
    x = len(A)
    y = 0 
    for i in range(0,x):
        for j in range(x,i-1,-1):
            new_str =  A[i:j]
            if new_str == new_str[::-1]:
                if len(new_str) >= y:
                    y = len(new_str)
                    pal_string = new_str

    return pal_string
print longestPalindrome('abb')
print longestPalindrome('aaaabbaaa')
print longestPalindrome('caba')
print longestPalindrome("abbcccbbbcaaccbababcbcabca")

Ввод: ("abbcccbbbcaaccbababcbcabca") должен вернуть bbcccbb, но мой код возвращает cbababc.

Я использую Python2.7.

1 Ответ

0 голосов
/ 03 июня 2018

Как указывал @ Aran-Fey, вам нужно изменить

if len(new_str) >= y:

на

if len(new_str) > y:

Объяснение: Если вы используете оператор >=, то более поздние палиндромы ста же самая длина переопределяет более ранние, в то время как оператор > гарантирует, что вы будете устанавливать pal_string и y, только если вы нашли более длинный палиндром.

...