力扣:5、最长回文子串

力扣:5、最长回文子串

力扣小白的自闭学习过程,争取做到每日更新,加油


题目描述

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

示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:
输入:s = "cbbd"
输出:"bb"

示例 3:
输入:s = "a"
输出:"a"

示例 4:
输入:s = "ac"
输出:"a"

提示:
    1 <= s.length <= 1000
    s 仅由数字和英文字母(大写和/或小写)组成

一、动态规划

找到的好理解的方法,还是缺乏完全自主做题的能力,再次成为一个搬运工,原版链接

解题思路

  • 动态规划:
    1、 d p [ i ] [ j ] dp[i][j] dp[i][j]表示 s [ i : j ] s[i:j] s[i:j]是否为回文串;
    2、如果 s [ i ] = = s [ j ] s[i] == s[j] s[i]==s[j],则 d p [ i ] [ j ] = = d p [ i + 1 ] [ j − 1 ] dp[i][j] == dp[i+1][j-1] dp[i][j]==dp[i+1][j1]
    3、每次更新完dp[i][j]之后,更新 m a x l e n max_len maxlen s t a r t start start
  • 边界
    1、 l e n ( s ) < 2 len(s) < 2 len(s)<2时必为回文串;
    2、 d p [ i ] [ i ] = T r u e dp[i][i]=True dp[i][i]=True
class Solution:
    def longestPalindrome(self, s: str) -> str:
        # 动态规划,dp[i][j]表示s[i:j]是否为回文子串
        # 每次判断s[i][j]时更新maxlen=j-i+1和start=i
        # 边界,当j-i+1<2时,肯定是回文串
        n = len(s)
        dp = [[False]*n for _ in range(n)]
        start, max_len = 0, 1

        # 边界
        if n < 2:
            return s
        # 初始化
        for i in range(n):
            dp[i][i] = True
        # 枚举区间终点
        for j in range(1, n):
            # 枚举起点
            for i in range(0, j):
                if s[i] == s[j]:
                    if j - i < 3:
                        dp[i][j] = True
                    else:
                        dp[i][j] = dp[i+1][j-1]
                
                if dp[i][j]:
                    l = j - i + 1
                    if l > max_len:
                        max_len = l
                        start = i

        return s[start: start+max_len]

执行结果
在这里插入图片描述


参考内容: 1、https://leetcode-cn.com/problems/longest-palindromic-substring/solution/dong-tai-gui-hua-ni-chao-rong-yi-li-jie-j8frz/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值