LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】,知识拓展:动态规划初了解

题目描述

        给你一个字符串 s,找到 s 中最长的回文子串。

解答

class Solution(object):
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        # 思路一:中心拓展
        def extend_from_center(left,right):
            # 从中心向两侧检测回文
            while left>=0 and right < len(s) and s[left]==s[right]:
                left-=1
                right+=1
            return s[left+1:right]
        # 预先声明longest_palindrome
        longest_palindrome = ""
        for i in range(0,len(s)):
            # 奇数回文子串
            palindrome1=extend_from_center(i,i)
            # 偶数回文子串
            palindrome2=extend_from_center(i,i+1)
            # 迭代最长回文串
            longest_palindrome=max(longest_palindrome, palindrome1, palindrome2, key=len)
        return longest_palindrome

        # # 思路二:动态规划
        # n = len(s)
        # if n <= 1:
        #     return s  # 单字符或空字符串直接返回
        # # 初始化 dp 表,dp[i][j] 表示 s[i:j+1] 是否是回文
        # dp = [[False] * n for _ in range(n)]
        # start, max_length = 0, 1  # 记录最长回文子串的起始位置和长度
        # # 所有长度为 1 的子串是回文
        # for i in range(n):
        #     dp[i][i] = True
        # # 判断所有长度为 2 的子串是否是回文
        # for i
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值