力扣 5. 最长回文子串 python AC

动态规划

python 复制代码
class Solution:
    def longestPalindrome(self, s):
        size = len(s)
        maxl = 1
        start = 0
        dp = [[False] * size for _ in range(size)]
        for i in range(size):
            dp[i][i] = True
        for L in range(2, size + 1):
            for i in range(size):
                j = L + i - 1
                if j >= size:
                    break
                if s[i] == s[j]:
                    if L >= 4:
                        dp[i][j] = dp[i + 1][j - 1]
                    else:
                        dp[i][j] = True
                if dp[i][j] and maxl < L:
                    maxl = L
                    start = i
        return s[start:start + maxl]

这里将dp数组含义设为当前位置是否是回文子串

--创建二维dp[i][j],表示从索引i到索引j位置的子串是否是回文子串(初始值为False)

--将每个单个字符设置为True(长度为1的子串一定是回文子串)

--从2到size遍历L(代表子串长度)(从长度为2开始,因为长度为1的上一步已经标为了True)

--从0到size-1遍历i(代表子串起点)

--通过子串长度L和子串起点i求出子串终点(索引为L + i - 1)

--如果终点超过了整个字符串则退出

--如果i位置字符和j位置字符相同

--如果长度大于等于4

--dp[i][j]是否是回文子串 = dp[i+1][j-1]是否是回文子串

--否则(长度小于4,即没有更小的区间来推断)

--dp[i][j] = True

--判断长度是否比记录过的最大长度最大

--是的话更新最大长度,并记录此时的起点i

--返回字符串s从start到start+最大长度的子串

相关推荐
拼好饭和她皆失几秒前
基础算法--写给算法小白的模板指南:快速掌握核心代码,蓝桥杯必备模板
算法
吞下星星的少年·-·1 分钟前
rotate函数应用模板
算法
zh1570231 分钟前
CSS如何让元素出现时带抖动_利用关键帧定义抖动动画
jvm·数据库·python
AI技术增长1 分钟前
Pytorch图像去噪实战(五):FFDNet可控图像去噪实战,用噪声强度图解决不同噪声等级问题
pytorch·python·深度学习
AI科技星5 分钟前
人类首张【全域数学公理体系】黑洞内部结构图—基于「0-1-∞」三元本源的全维深度解析
人工智能·算法·机器学习·数学建模·数据挖掘·量子计算
花月C15 分钟前
Agent应用开发零基础入门:核心概念、环境配置与首次LLM调用
java·python
paeamecium20 分钟前
【PAT甲级真题】- Recover the Smallest Number (30)
数据结构·算法·pat考试·pat
Dillon Dong22 分钟前
【风电控制】变流器转矩控制回路深度解析:从指令生成到闭环控制
算法·变流器·风电控制
玛丽莲茼蒿27 分钟前
Leetcode hot100 在排序数组中查找元素的第一个和最后一个位置【中等】
数据结构·算法
【 】42328 分钟前
从迭代器到生成器
python·迭代器·生成器