Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
O(N^2), Accept: 23ms
#include <string.h>
char *longestPalindrome(char *s) {
size_t n = strlen(s);
if (n == 1) {
return s;
}
size_t left = 0;
size_t right = 0;
size_t diff = 0;
for (size_t i = 0; i < n - 1; ++i) {
size_t l = i;
size_t r = i + 1;
for (; l >= 0 && r < n; --l, ++r) {
if (s[l] != s[r]) {
break;
}
if (r - l + 1 > diff) {
left = l;
right = r;
diff = r - l + 1;
}
}
l = i - 1;
r = i + 1;
for (; l >= 0 && r < n; --l, ++r) {
if (s[l] != s[r]) {
break;
}
if (r - l + 1 > diff) {
left = l;
right = r;
diff = r - l + 1;
}
}
}
char *rst = (char*)malloc(sizeof(char) * (diff + 1));
memcpy(rst, s + left, diff);
rst[diff] = '\0';
return rst;
}