1 思路
中心法
中心法分为两种情况
情况1:
一个字母作为中心
情况2:
两个字母之间的空隙作为中心
2 代码实现
char * longestPalindrome(char * s)
{
if (s == NULL) {
return NULL;
}
int len = strlen(s);
if (len == 0) {
return "";
}
char* ret = (char*)malloc(sizeof(char) * (len + 1));
memset(ret, 0, sizeof(char) * (len + 1));
int i = 0;
int max = -1;
int start = -1;
// 一个字母为中心
for (i = 0; i < len; i++) {
int j = i;
int k = i;
while (j >= 0 && k < len) {
if (s[j] == s[k]) {
if (k - j + 1> max) {
max = k - j + 1;
start = j;
}
k++;
j--;
} else {
break;
}
}
}
// 两个字母为中心
for (i = 0; i < len - 1; i++) {
int j = i;
int k = i + 1;
while (j >= 0 && k < len) {
if (s[j] == s[k]) {
if (k - j + 1> max) {
max = k - j + 1;
start = j;
}
k++;
j--;
} else {
break;
}
}
}
strncpy(ret, s + start, max);
return ret;
}