0
点赞
收藏
分享

微信扫一扫

5. 最大回文子串 看起来不难但是用了一晚上

亿奇学 2022-01-10 阅读 47

一共用了两种解法,暴力解和动态规划,学习到了动态规划思想。

1.暴力解

遍历字符串i(0,len)和(i,len),拿到所有子串,然后对每个子串检查是否首末字母相同,符合条件的字母放在一个L数组中。等待所有子串遍历和检查完毕后,对L数组的每一个元素遍历,将其中最长的元素输出。时间复杂度o(n3),空间复杂度o(n),附代码:

class Solution:
    def longestPalindrome(self, s: str) -> str:
        temp = ''
        L = []
        if len(s) == 1:
            return s

        for i in range(len(s)+1):
            for j in range(i+1,len(s)+1):
                a = s[i:j]
                # print(a)
                for k in range(len(a)):
                    if a[k] != a[len(a)-k-1]:
                        break
                    if k == len(a)-1:
                        L.append(a)

        if len(L) == 1:
            return L[0]

        num = 0

        for i,z in enumerate(L):
            if i == 0:
                l = len(L[0])
                if len(L) == 1:
                    return L[0]
            else:
                if len(z)>l:
                    print(z)
                    l = len(z)
                    num = i

        return L[num]

2.动态规划解法

看了教程总结下就是,高中数学里的方法,先约束条件再按条件逐渐缩小范围。明天早上再写。

举报

相关推荐

0 条评论