//暴力做法 超时
public boolean check(String s){
int len = s.length();
for(int i = 0;i<len/2;i++){
if(s.charAt(i)!=s.charAt(len-i-1)){
return false;
}
}
return true;
}
public String longestPalindrome(String s) {
int len = s.length();
int max= 0;
String res = "";
for(int i=0;i<len;i++){
for(int j=i+1;j<=len;j++){
String temp = s.substring(i, j);//子串始于 i,终于 j-1;
if(check(temp)&&(j-i+1)>max){
max = j-i+1;
res =temp;
}
}
}
return res;
}
//用dp 若 子串(i+1,j-1)是回文子串且 第i和j相同,则(i,j)为回文子串
public String longestPalindrome(String s) {
int len = s.length();
int max = 1;
int begin =0;
if(len<2) return s;
boolean[][] dp = new boolean[len][len];
for(int i=0;i<len;i++){
dp[i][i]=true;
}
for(int l =2;l<=len;l++){
for(int i = 0;i<len;i++){
int j = l+i-1;
if(j>=len) break;
if(s.charAt(i)!=s.charAt(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>max){
max = j-i+1;
begin =i;
}
}
}
return s.substring(begin,begin+max);
}
11-02
11-02