最长回文子串(动态规划)c++

题目描述:给你一个字符串 s,找到 s 中最长的回文子串。

递推式:

class Solution {
public:
    string longestPalindrome(string s) {
        int len=s.size();
        if(len<2)
            return s;
        bool dp[len][len];//布尔型,dp[i][j]表示从i到j是否构成回文
       int max_count=1;//最大字串的长度
       int start=0;//最长字串的起始位置
        for(int j=0;j<len;j++)
        {
            for(int i=0;i<j;i++)
            {
                if(s[i]!=s[j])
                    dp[i][j]=false;
                else if((j-i)<3)//(j-1)-(i+1)+1<2表示dp[i][j]的最大字串长度为1
                    dp[i][j]=true;
                else
                {
                    dp[i][j]=dp[i+1][j-1];
                }
                if((j-i+1)>max_count&&dp[i][j])
                 {
                    max_count=j-i+1;
                    start=i;
                 }   
            
            }
  
        }     
        return s.substr(start,max_count);//截取字符串
    }
};

 

全部评论

相关推荐

叁六玖:要是这个时候有人找你,你不炸了吗
点赞 评论 收藏
分享
叁六玖:你看,最后不是让你加油,就是鼓励你,还祝福你求职顺利。
点赞 评论 收藏
分享
睡个觉先1555:你这个学历,这个实习,不知道你在紧张啥,包能找到好工作的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务