/*
* @Description:
* @Author: ice_cui
* @Date: 2025-04-22 15:41:15
* @Email: Lazypanda_ice@163.com
* @LastEditTime: 2025-04-22 21:23:45
* @Version: V1.0.0
* @Copyright: Copyright (c) 2025 Your Company. All rights reserved.
*/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
char* longestPalindrome(char *s) {
int len = strlen(s);
if (len < 2) {
return s;
}
int start = 0, maxLen = 1;
for (int i = 0; i < len; i++) {
// 以单个字符为中心扩展
for (int left = i, right = i; left >= 0 && right < len && s[left] == s[right]; left--, right++) {
int curLen = right - left + 1;
if (curLen > maxLen) {
maxLen = curLen;
start = left;
}
}
// 以两个字符为中心扩展
for (int left = i, right = i + 1; left >= 0 && right < len && s[left] == s[right]; left--, right++) {
int curLen = right - left + 1;
if (curLen > maxLen) {
maxLen = curLen;
start = left;
}
}
}
char *result = (char *)malloc((maxLen + 1) * sizeof(char));
if (result == NULL) {
return NULL;
}
for (int i = 0; i < maxLen; i++) {
result[i] = s[start + i];
}
result[maxLen] = '\0';
return result;
}
int main() {
char input[] = "babad";
char *output = longestPalindrome(input);
if (output != NULL) {
printf("最长回文子串是: %s\n", output);
free(output);
}
return 0;
}