【算法|动态规划No30】leetcode5. 最长回文子串

个人主页:兜里有颗棉花糖
欢迎 点赞 收藏✨ 留言✉ 加关注本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
希望我们一起努力、成长,共同进步。
在这里插入图片描述

点击直接跳转到该题目

目录

  • 1️⃣题目描述
  • 2️⃣题目解析
  • 3️⃣解题代码

1️⃣题目描述

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

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

示例2:

输入:s = “cbbd”
输出:“bb”

注意:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

2️⃣题目解析

本题目其实就是回文字串的加强版。所以这里就对本题目进行简单描述啦!!!

首先:我们要判单[i,j]区间字串时候是回文串(此步骤就是回文字串那道题目),最后我们只需要返回长度最大的回文字串就可以啦!!!

返回值:

  • s.substr(begin,len)

3️⃣解题代码

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();
        vector<vector<bool>> dp(n,vector<bool>(n));
        int len = 1,begin = 0;
        for(int i = n - 1;i >= 0;i--)
        {
            for(int j = i;j < n;j++)
            {
                if(s[i] == s[j])
                    dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;
                if(dp[i][j] && j - i + 1 > len) len = j - i + 1,begin = i;
                
            }
        }
        return s.substr(begin,len);
    }
};

最后也是顺利通过啦!!!

【算法|动态规划No30】leetcode5. 最长回文子串_第1张图片

你可能感兴趣的:(手撕算法系列专栏,LeetCode,算法,动态规划,leetcode)