Самый длинный палиндром в подстроке струны - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь найти самый длинный палиндром в строке, и это мой дубль.

def palindrome(x):
    rev = x[::-1]
    a = False
    if (rev==x):
        a = True
    return a


def longest_palindrome(s):

    last = len(s) 
    lst = []
    for i in range (last):
        for j in range (i+1,last):
            b = s[i] + s[j]
            a = palindrome(b)
            if (a==True):
                lst.append(b)
            else:
                continue
    return lst

a = input("Enter the string: ")
longest_palindrome(a)

Если мой ввод "aaba", он выдаст вывод ['aa','aa','aa'], тогда как вывод должен быть ['aa', 'aba'].Есть ли проблема в том, как я итерирую?

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

Это должно работать нормально.

def longest_palindrome(s):

    last = len(s)
    lst = []
    for i in range(last):
        for j in range(i+1, last):
            b = s[i:j+1]       #Here's the catch.
            a = palindrome(b)
            if a:
                lst.append(b)
    return lst

Вы можете использовать операторы печати для проверки.Если вы добавите оператор print к своему коду, вы увидите, что вы просто проверяете строку длиной не более 2 («aa», «ab», «ba»).

Надеюсь, это поможет.

0 голосов
/ 02 марта 2019

Я думаю, что проблема в вашем коде заключается в поиске подстрок.Попробуйте это

def palindrome(x):
    if len(x) <= 1: ## This condition checks if the length of the string is 1. And if so, it returns False
        return False
    return x == x[::-1]:


def longest_palindrome(s):

    last = len(s)
    lst = []
    for i in range(last):
        for j in range(i, last): ## Iterate from i to last not i+1 to last
            b = s[i:j+1]         ## Slicing the original string to get the substring and checking if it is a pallindrome or not.
            if palindrome(b):
                lst.append(b)
            else:
                continue
    return lst

a = input("Enter the string: ")
print(longest_palindrome(a))

.Этот код поможет

...