diff --git a/5-longest-palindromic-substring.cpp b/5-longest-palindromic-substring.cpp new file mode 100644 index 0000000..9463aad --- /dev/null +++ b/5-longest-palindromic-substring.cpp @@ -0,0 +1,54 @@ +#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; + } +};