Not optimal but accepted solution for problem 5 - longest palindromic substring
This commit is contained in:
54
5-longest-palindromic-substring.cpp
Normal file
54
5-longest-palindromic-substring.cpp
Normal file
@@ -0,0 +1,54 @@
|
||||
#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;
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user