O(N2) code
class Solution {
public:
string longestPalindrome(string str) {
int size = str.length();
int ps = 0, maxLen = 1;
vector<vector<bool>> isP(size, vector<bool>(size, false));
// one character string and two character sub-strings
for (int s = 0; s < size; ++s) {
isP[s][s] = true;
int e = s + 1;
if ((e < size) && (str[s] == str[e])) {
isP[s][s+1] = true;
ps =s ; maxLen = 2;
}
}
for (int step = 2; step < size; ++step) {
for (int s = 0; s + step < size; ++s) {
int e = s + step;
if ((str[s] == str[e]) && (isP[s+1][e-1])) {
isP[s][e] = true;
ps = s; maxLen = step + 1;
}
}
}
return str.substr(ps, maxLen);
}
};