为了账号安全,请及时绑定邮箱和手机立即绑定

字符串子串中最长的回文

字符串子串中最长的回文

智慧大石 2021-11-23 20:02:34
我试图找到字符串中最长的回文,这是我的看法。def palindrome(x):    rev = x[::-1]    a = False    if (rev==x):        a = True    return adef 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 lsta = input("Enter the string: ")longest_palindrome(a)如果我的输入是“aaba”,它会产生输出,['aa','aa','aa']而输出应该是['aa', 'aba']. 我迭代的方式有问题吗?
查看完整描述

2 回答

?
浮云间

TA贡献1829条经验 获得超4个赞

我认为您的代码中的问题在于查找子字符串。尝试这个


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))

. 此代码将有所帮助


查看完整回答
反对 回复 2021-11-23
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

这应该可以正常工作。


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”)。


我希望它有帮助。


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 224 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信