力扣 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+最大长度的子串

相关推荐
vortex59 分钟前
国密(商用密码)算法核心参数速查
算法·密码学
godspeed_lucip9 分钟前
LLM和Agent——专题5: LLM Ops 入门(1)
人工智能·python
l1t28 分钟前
DeepSeek总结的使用实体-组件-系统和基于存在性处理进行Python编程7-8
开发语言·python
俊哥工具29 分钟前
无广告免费壁纸工具,手机电脑壁纸随心更换
python·智能手机·django·计算机外设·virtualenv·pygame
scan7241 小时前
大模型调用多个工具
python
暴躁小师兄数据学院1 小时前
【AI大模型应用开发工程师特训笔记】第04讲(第 2 章):Python 项目企业级开发规范
人工智能·笔记·python
wuweijianlove1 小时前
算法中的记忆化思想与重复子问题优化的技术5
算法
小江的记录本2 小时前
【JVM虚拟机】垃圾回收GC:垃圾判定算法:引用计数法、可达性分析算法(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·算法·spring·面试
Hello.Reader2 小时前
算法基础(十四)—— 随机化快速排序为什么平均表现很好
算法
清水白石0082 小时前
构建企业级 Python 服务:配置、日志、指标与追踪的稳健之道
开发语言·python·elasticsearch