【LeetCode 5.】 最长回文子串

一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到?如果显然具备这个特性,那么就应该朝动态规划思考。如果令dpij表示串si:j+1是否是回文子串,那么判断dp[i][j] 是否是回文子串,相当于判断si 与 sj 是否相等 + dpi+1j-1 是否相等。

1. 题目

2. 分析

这道题我写了一个小时才写出来,相比之前看答案写题是有进步的。估计这道题我这半个月都不会忘记了。一道题能否使用动态规划就在于判断最优结构是否是通过最优子结构推导得到?如果显然具备这个特性,那么就应该朝动态规划思考。

具体看一个样例:s="babad",判断这个字符串是否是最长回文子串,相当于判断aba是否是回文子串和b与d是否相等。

0 1 2 3 4
b a b a d

相当于判断最后一个字符和要判断子串的第一个字符是否相等,外加判断内部子串是否是回文子串。

1 2 3
a b a

那么抽象一下,就可以得出:判断dp[i][j] 是否是回文子串,相当于判断si 与 sj 是否相当 + dpi+1j-1 是否相等。

3. 代码

python 复制代码
class Solution:
    def longestPalindrome(self, s: str) -> str:
        dp = [[0] * len(s) for i in range(len(s))]
        
        for cur_length in range(1, len(s)+1):
            for i in range(0, len(s)):
                j = i + cur_length - 1 # 终点下标
                if j >= len(s): # 越界处理
                    continue
                if j == i:
                    dp[i][j] = 1
                    continue
                if cur_length == 2: # 长度为2的区间
                    if s[j] == s[i]:
                        dp[i][j] = 1
                    continue
                if s[j] == s[i] and dp[i+1][j-1]: # 如果起点和终点相同
                    dp[i][j] = 1

        # print(dp)
        max_len = 0
        res = ""
        for i in range(len(s)):
            for j in range(len(s)):
                if dp[i][j] == 1:
                    if j-i+1 > max_len:
                        max_len = max(max_len, j-i+1)
                        res = s[i:j+1]
        return res
相关推荐
落羽的落羽36 分钟前
【项目】JsonRpc框架——开发实现1(细节功能、字段定义、抽象层、具象层)
linux·服务器·网络·c++·人工智能·算法·机器学习
handler011 小时前
【算法】并查集(普通/扩展/带权)模板与例题
数据结构·c++·笔记·算法·c·图论·查并集
qq7422349841 小时前
从“感知”到“决断”:测评百度伐谋产业决策智能体的端到端推理与行动机制
人工智能·算法·百度·大模型·运筹优化
huohaiyu2 小时前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
浮芷.2 小时前
鸿蒙PC端 TTS 并发调用问题详解:资源竞争与队列管理
算法·华为·开源·harmonyos·鸿蒙·鸿蒙系统
装不满的克莱因瓶2 小时前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
Lsk_Smion2 小时前
力扣实训 _ [994].腐烂的橘子/图论
算法·leetcode·图论
轻微的风格艾丝凡2 小时前
两电平三相VSC整流模式从不控整流平滑切换至有源整流调试记录
算法·dsp·c2000
dongf20193 小时前
R语言KNN算法
算法·数据分析·r语言
小O的算法实验室3 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习