5
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if(len < 2) return s;
boolean[][] dp = new boolean[len][len];
for (int i = 0; i < len; i++) {
dp[i][i] = true;
}
int maxLen = 1;
int begin = 0;
for (int L = 2; L <= len; L++) {
for (int i = 0; i < len - L; i++) {
int j = i + L - 1;
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] && L > maxLen){
maxLen = L;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
}
}
class Solution {
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) {
return "";
}
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = expandAroundCenter(s, i, i);
int len2 = expandAroundCenter(s, i, i + 1);
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
public int expandAroundCenter(String s, int left, int right) {
while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right--;
}
return right - left - 1;
}
}