给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
char * longestPalindrome(char * s){
int len = strlen(s);
if (len <= 1)
return s;
int maxlen[len];
for (int i = 0; i < len; i++)
{
int k = 1;
/*bab i两侧是相同的, i为a的下标*/
while (i - k >= 0 && i + k < len && s[i-k] == s[i+k])
{
k++;
}
maxlen[i] = 2 * (k - 1) + 1;
k = 1;
/*abba i前一个字节与自己相同,这时i为第一个b的下标*/
while (i - k + 1 >= 0 && i + k < len && s[i-k+1] == s[i+k])
{
k++;
}
if (2*(k - 1) > maxlen[i])
{
maxlen[i] = 2 * (k - 1);
}
}
int max = maxlen[0];
int max_index = 0;
for (int i = 1; i < len; i++)
{
if (max < maxlen[i])
{
max = maxlen[i];
max_index = i;
}
}
int start = max_index - (max - 1) / 2;
int end = max_index + max / 2;
s[end + 1] = '\0';
return s+start;
}