m0_62284963 2021-09-27 20:56 采纳率: 28.6%
浏览 21
已结题

我用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;
}
  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2021-09-27 21:01
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月5日
  • 已采纳回答 9月27日
  • 创建了问题 9月27日