#include using std::string; class LongestPalindromicSubstringSolution { public: string longestPalindrome(string s) { if (s.length() == 1) return s; if (s.length() == 2) { if (s[0] == s[1]) return s; char str[2]; str[0] = s[0]; str[1] = 0; return str; } const char* ptrStart = s.c_str(); const unsigned long strLen = s.length(); unsigned long strLongest = strLen; char *res = new char[strLen+1]; memset(res, 0, strLen+1); for (; strLongest >= 2; strLongest--) { for (unsigned long i = 0; (i + strLongest) <= strLen; i++) { const char* start(ptrStart + i); const char* finish(start + strLongest - 1); while (start <= finish) { if (*start != *finish) break; start++; finish--; } if (start > finish) { memcpy(res, ptrStart + i, strLongest); break; } } if (res[0] != 0) break; } if (res[0] == 0) { res[0] = s[0]; } string resStr(res); delete [] res; return resStr; } };