class Solution {
public String longestPalindrome(String s) {
if(null == s || s.length()<=1)
return s;
int begin = 0, len = s.length();
int longlen = 1;
int[][] dp = new int[len][len];
char[] c = s.toCharArray();
for (int i = 0; i < len; i++) {
dp[i][i]=1;
if(i<len-1&& c[i]==c[i+1]){
dp[i][i+1]=1;
begin= i;
longlen = 2;
}
}
for (int i = 3; i <= len; i++) {
for (int j = 0; j <= len -i; j++) {
int k = j+i-1;
if(c[k]==c[j] && dp[j+1][k-1]==1){
dp[j][k]=1;
begin=j;
longlen=i;
}
}
}
return s.substring(begin,begin+longlen);
}
}
使用dp[i][j] 记录从i到j长度的字符串是否是回文字符串,如果是则置为1.
显然,长度为1的字符串都是回文字符串,因此首先处理长度为1和2的字符串,
然后对长度3以上的字符串进行遍历。
其若满足,s[i]==s[j]&&dp[i+1][j-1]==1 则,dp[i][j]=1;