编辑代码

#include <stdio.h>//最长回文子串-动态规划算法
#include <stdlib.h>
void longestPalindrome(char*,int);
int main () {
    int len;
    scanf("%d",&len);
    char *str=(char*)malloc(len*sizeof(char));
    scanf("%s",str);
    // for(int i=0;i<len;i++)
    //     printf("%c",str[i]);
    longestPalindrome(str,len);
	return 0;
}

void longestPalindrome(char *str, int len){
    int i,j;
    int maxLen=0;
    int begin;
    // char *substr=(char*)malloc((len+1)*sizeof(char));
    int **dp=(int**)malloc(len*sizeof(int*));
    for(i=0;i<len;i++){
        dp[i]=(int*)malloc(len*sizeof(int));
    }
    if(len<2){
        return str;
    }
    for(int L=2;L<len;L++){
        for(i=0;i<len;i++){
            j=L+i-1;
            if(j>=len)
                break;
            if(str[i]!=str[j]){
                dp[i][j]=0;
            }
            else{
                if(j-i<3){
                    dp[i][j]=1;
                }
                else{
                    dp[i][j]=dp[i+1][j-1];
                }
            }
            if (dp[i][j]==1 && j-i+1>maxLen) {
                maxLen = j - i + 1;
                begin = i;
                // printf("%d",begin);
            }
        }
    }
    for(i=begin;i<=begin+maxLen-1;i++){
        printf("%c",str[i]);
    }

}