class Solution {
public:
string longestPalindrome(string s) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = s.length();
int max_len = 0;
int pos = 0;
int dp[len][len];
for (int i = 0; i < len; i++)
for (int j = 0; j < len; j++)
dp[i][j] = (i >= j);
for (int l = 1; l < len; l++) {
for (int i = 0; i + l < len; i++) {
int j = i + l;
if (s[i] != s[j])
dp[i][j] = false;
else
dp[i][j] = dp[i + 1][j - 1];
if (dp[i][j] && l > max_len) {
max_len = l;
pos = i;
}
}
}
return s.substr(pos, max_len + 1);
}
};
Small Case: 8ms
Large Case: 1608ms
Time: O(n^2)
Space: O(n^2)
有O(n)的解法