问题:提供一个字符串s,找出字符数组s中最长的回文子串。

示例 1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

解答:这本来是一道经典的动态规划题目,在力扣、牛客等练习平台上皆有解题思路与代码,然而解决办法中很少用C语言实现,为此本文特意用C语言进行实现。

代码

char * longestPalindrome(char * s){
    if (s == NULL || strlen(s) < 2) {
        return s;
    }
    int dp[1000][1000] = {0};
    int maxLen = 1;
    int startP = 0;
    int endP = 0;
    for (int i = 1; i < strlen(s); i++) {
        for (int j = 0; j < i; j++) {
            if ((s[i] == s[j]) && (((i -j) <= 2) || (dp[i - 1][j + 1] == 1))) {
                dp[i][j] = 1;
                if (i - j + 1 > maxLen) {
                    maxLen = i - j + 1;
                    startP = j;
                    endP = i; 
                }
            }
        }
    }
    char *ret = (char *)malloc(sizeof(char) * (maxLen + 1));
    for (int i = 0; i < maxLen; i++){
        ret[i] = s[i + startP];
    } 
    ret[maxLen] = 0;
    return ret;
}

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐