随笔 - 46, 文章 - 0, 评论 - 0, 阅读 - 9609

动态规划 -- 最长回文子串

Posted on   wuqiu  阅读(22)  评论(0编辑  收藏  举报

5.最长回文子串

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

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

class Solution {
public:
    string longestPalindrome(string s) {
        int len = s.length()-1;
        int dp[len+5][len+5];
        int maxLenth = 1; 
        memset(dp,0,sizeof(dp));
        int leftSide = 0 ;
        for(int i = 0 ;i <= len;i++)   dp[i][i] = 1;
        for(int L = 2 ;L <= len+1 ;L++){ // 枚举字串的长度
            for(int i = 0 ;i<= len ;i++){ // 枚举字串左边界
                int j = i + L -1; // 枚举字串右边界
                if(j > len) break;
                if(s[i] == s[j]){
                    if(j - i < 3 || dp[i+1][j-1]){// 如果字串的长度为 2 或 3  或者 子串的字串是回文
                        if(L > maxLenth){
                            maxLenth = L;
                            leftSide = i;
                            rightSide = j;
                        }    
                        dp[i][j] =1;
                    }
                }
            }
        }
        return s.substr(leftSide,maxLenth);
    }
};

说明

回文字符串是天生具有递推关系的一类字符串,判定一个字符串是否是回文字符串,只需要判定其去掉两端字符之后是否是一个回文字符串

相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示