给你一个字符串 s,找到 s 中最长的回文子串。
动态规划
遍历时从列开始,举个例子,如果 a[0]与a[4]相同,就需要看1到3是否是回文串,列为1,所以以列先遍历,又因为子串中i一定小于j,所以遍历时i<j,因为j-1-(i+1)+1<2,j-i<3时即子串小于2时一定是回文的
class Solution {
public String longestPalindrome(String s) {
if(s.length() < 2)
return s;
int begin = 0;
int maxlen = 1;
int len = s.length();
char []a = s.toCharArray();
boolean dp[][] = new boolean [len][len];
for(int i=0;i<len;i++)
dp[i][i] = true;
for(int j=1;j<len;j++){
for(int i=0;i<j;i++){
if(a[i]!=a[j])
dp[i][j]=false;
else{
if(j - i < 3){
dp[i][j] = true;
}
else
dp[i][j] = dp[i+1][j-1];
}
if(dp[i][j]&&(j-i+1>maxlen)){
begin=i;
maxlen=j-i+1;
}
}
}
return s.substring(begin,begin+maxlen);
}
}