最长回文子串

 

描述:给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。(注:“回文串”是一个正读和反读都一样的字符串)

 

样例

 

给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"

 

class Solution {
public:
string longestPalindrome(string& s) {
if(s.empty())
return string();
int length=s.length();
if(1==length)
return s;
bool dp[length][length];
for(int i=0;i<length;++i){
for(int j=0;j<length;++j){
if(i>=j)
dp[i][j] = true;
else
dp[i][j] = false;
}
}
int max=-1,rj,ri;
for(int offset=1;offset<length;++offset){
for(int i=0;i+offset<length;++i){
int j=i+offset;
if(s[i]!=s[j])
dp[i][j]=false;
else{
dp[i][j]=dp[i+1][j-1];
if(dp[i][j]&&offset+1>max){
max=offset+1;
rj=j;
ri=i;
}
}
}
}
return s.substr(ri,max);
}
};

posted @ 2017-03-06 16:38  莫先生96  阅读(150)  评论(0编辑  收藏  举报