给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
解法:动态规划 dp[i][j]表示s[i]到s[j]组成的子串是否是回文。dp[i][j]=true意味着dp[i+1][j-1]=true且s[i]==s[j].
public String longestPalindrome(String s) {
if(s==null||s.length()<=1)
return s;
boolean f=true;
boolean[][] dp=new boolean[s.length()][s.length()];
String res=s.substring(0,1);
for(int i=0;i<s.length();i++){
dp[i][i]=true;
}
int c=1;
while(c<s.length()){
for(int i=0;i+c<s.length();i++){
if(s.charAt(i)==s.charAt(i+c)&&(c<=2||dp[i+1][i+c-1]==true)){
dp[i][i+c]=true;
res=s.substring(i, i+c+1);
}
else {
dp[i][i+c]=false;
}
}
c++;
}
return res;
}