55 lines
1.3 KiB
C++
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;
|
|
}
|
|
};
|