我用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成了必然执行的,可不是输入什麽就输出什麽麽