python_leetcode_3_最长回文子串

#################################################
超时的暴力破解法
设置dp为验证矩阵判断,dp[j][j+i]表示序列的i到j是否为回文序列
参考了他人的解法代码:回文序列判断条件:
1.字符串s[j] = s[i+j] 即 dp[j][j+i]=1
2.回文序列的内部也是回文序列即dp[j+1][i+j-1]=1
#################################################
在这里插入图片描述

#超时暴力破解代码
class Solution:
    def longestPalindrome(self, s: str) -> str:
        string = s
        s_return = ""
        len_max = 0
        for i in range(len(s)-1):
            head = s[i]
            for j in range(i+1,len(s)):
                if s[j] ==head:
                    s_rev = [p for p in reversed(s[i:j+1])]
                    if list(s[i:j+1]) == s_rev:
                        if len(s[i:j+1])>len_max:
                            len_max = len(s[i:j+1])
                            s_return = s[i:j+1]
                else:
                    continue
        if len_max!=0:
            return s_return
        elif s=="":
            return s
        else:
            return s[0]
        

在这里插入图片描述

#参考的代码:
class Solution:
    def longestPalindrome(self, s: str) -> str:
        length = len(s)
        dp = [[0] * length for _ in range(length)]
        left, right = 0, 0 
        #i象征步长j指示初始位置
        for i in range(1, length):
             for j in range(length-i):
             #关键:j+1 >= j+i-1 表示将长度为2或者为3的首尾相同字母的串设置为回文序列
                if s[j] == s[j+i] and (j+1 >= j+i-1 or dp[j+1][j+i-1]):
                    dp[j][j+i] = 1 
                    left, right = j, j+i
        return s[left: right+1]

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值