求一个字符串的最大回文数

/*
 * @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;
}
posted @ 2025-04-22 21:29  ice_cui  阅读(8)  评论(0)    收藏  举报