//C++
string longestPalindrome(string s)
{
string result;
for (int i = 0; i < s.size(); i++)
{
//单数
int k = 0;
string str = "";
while (((i + k) < s.size()) && ((i - k) >= 0) && (s[i + k] == s[i - k]))
{
k++;
}
k = k - 1;
for (int j = 0; j < (k * 2) + 1; j++)
{
str = str + s[i - k + j];
}
if (str.size() > result.size())
result = str;
//双
int m = 0;
string ss = "";
while (((i + m + 1) < s.size()) && ((i - m) >= 0) && (s[i + m + 1] == s[i - m]))
{
m++;
}
m = m - 1;
for (int j = 0; j < (m * 2) + 2; j++)
{
ss = ss + s[i - m + j];
}
if (ss.size() > result.size())
result = ss;
}
return result;
}
class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
boolean[][] dp = new boolean[len][len];
char[] charArray = s.toCharArray();
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 (charArray[i] != charArray[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) {
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
}
}