#include <algorithm> //还看到了dp的做法,dp做法主要是要想出来如何将大问题分解小问题,这道题就是一个二维dp。 //用dp[i][j]表示以i开始,以j结束的字符串是否是回文串。 //当i=j时,dp[i][j] = (s[i] == s[i]) = true; //当j = i + 1 时,dp[i][j] = (s[i] == s[i+1]); //其他,dp[i][j] = (dp[i-1][j+1] && s[i]==s[j]) //动态规划 class Solution { public:     string longestPalindrome(string s) {         int len = s.size();         vector<vector<int> > dp(len+1,vector<int>(len+1,0));         //dp[i][j]代表从i到j-1中是否是回文串,1代表是,0代表不是         //循环的时候i从大到小循环,j从小到大循环         int maxLen = 0;         int start = 0;         int end = 0;         for(int i=len-1;i>=0;i--)         {             for(int j=1;j<=len;j++)             {                 if(i==j-1)                     dp[i][j]=1;                 else if((i+1==j-1)&&(s[i]==s[j-1]))                     dp[i][j]=1;                 else                     dp[i][j]=((dp[i+1][j-1])&&(s[i]==s[j-1]));                   if(dp[i][j]==1)                 {                     if(j-i>maxLen)                     {                         start = i;                         end = j-1;                         maxLen = j-i;                     }                                     }             }         }         return s.substr(start,end-start+1);     } };
点赞 评论

相关推荐

点赞 评论 收藏
分享
肥肠椒绿:双非本可不就犯天条了,双非本就应该打入无间地狱
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务