最长回文子串(动态规划)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);//截取字符串
    }
};

 

全部评论

相关推荐

05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
简历中的项目经历要怎么写
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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