我用c语言写了一段动态规划的寻找最长回文字符,可是总是不成功,找了半天,输入babad,却输出babad,以下是代码

我用c语言写了一段动态规划的寻找最长回文字符,可是总是不成功,找了半天,输入babad,却输出babad,以下是代码

问题描述:


char * longestPalindrome(char * s)
{
    //读取长度
    int len = strlen(s);
    if( len <= 1);
    {
        return s;
    }
    //定义布尔型
    bool dp[1001][1001];
    memset(dp,0,sizeof(dp));
    dp[0][0]=1;
     //给长度为2的赋值,因为上面的排出,最短的长度就是2了
     for(int i =1; i < len;i++)
     {
      dp[i][i]=true;
      //因为下面判断时候会出[1][0]的时候,不然会出错
      dp[i][i-1]=true; 
     }
    int left = 0;
    int right = 0;
    int max = 0;
    //k表示回文字节的长度,先从2开始
    for(int k=2; k <= len;k++)
    {
      //i表示回文字符的开始位置
      for(int i =0; i < len - k +1 ;i++ ) 
     {
       if(s[i] == s[i+k-1] && dp[i+1][i+k-2])
       {
            dp[i][i+k-1] =true;
           if(max < k-1)
           {
              max = k-1;
              left = i;
              right = i+k-1;
           }   
       }
     }
    }
    char* arr = (char*)malloc(sizeof(char)*(max*2));//因为 ap[X][Y]代表了2个字符,所以max*2才是最终的字符
    int i =0;
    for(;left<=right;i++)
    {
     arr[i]=s[left++];
    }
    arr[i]='\0';
    return  arr;
}

if( len <= 1);
因为这个分号,使得你后面的代码全成了废话了。
return s成了必然执行的,可不是输入什麽就输出什麽麽