005最长回文子串
class Solution {
public String longestPalindrome(String s) {
int length = s.length();
boolean[][] dp = new boolean[length][length];
for (int i = 0; i < length; ++i) {
dp[i][i] = true;
if (i < length - 1 && s.charAt(i) == s.charAt(i + 1)) {
dp[i][i + 1] = true;
}
}
for (int i = length - 1; i >= 0; --i) {
for (int j = i; j < length; ++j) {
if (j - i > 1) {
dp[i][j] = dp[i + 1][j - 1] && s.charAt(i) == s.charAt(j);
}
}
}
int maxLength = 0;
int start = 0;
for (int i = 0; i < length; ++i) {
for (int j = i; j < length; ++j) {
if (dp[i][j] && j - i + 1 > maxLength) {
maxLength = j - i + 1;
start = i;
}
}
}
return s.substring(start, start + maxLength);
}
}