Files
leetcode-cpp/5-longest-palindromic-substring.cpp

55 lines
1.3 KiB
C++

#include <string>
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;
}
};