Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Solution: 用二维矩阵p存储i到j是否是回文,只需填充该矩阵就可以。因为回文可以转化为子回文的求解,因此使用动态规划求解。
class Solution {
public:
string longestPalindrome(string s) {
bool p[1000][1000];
int max_length = 1;
int start = 0;
int end = 0;
for(int j = 0; j <= s.size(); j++)//stepsize
{
for(int i = 0; (i+j) < s.size(); i++)
{
if(j==0){
p[i][i] = 1;
if(max_length < 1){
start = i;
end = i;
max_length = 1;
}
}
if(j==1)
{
if(s[i] == s[i+1])
{
p[i][i+1] = 1;
if(max_length < 2){
start = i;
end = i+1;
max_length = 2;
}
}else{
p[i][i+1] = 0;
}
}
else{
if(!p[i+1][i+j-1] || s[i] != s[i+j]){
p[i][i+j] = 0;
}else{
p[i][i+j] = 1;
start = i;
end = i+j;
max_length = j+1;
}
}
}
}
return s.substr(start, end-start+1);
}
};