题目
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:
输入: “cbbd”
输出: “bb”
代码
char * longestPalindrome(char * s){
int i,j,k,max=0,length,l,d=0;
char result[2000];
char static Result[2000];
length=ArrayLength(s);
for(i=0;i<length;i++)
for(j=i+max;j<length;j++)
{ for(k=i,l=j;k<=l;k++,l--)
if(s[k]!=s[l])
break;
d=0;
if(k>l&&j-i+1>max)
{ max=j-i+1;
for(int p=i;p<=j;p++)
{
result[d++]=s[p];
}
}
}
for(int w=0;w<max;w++)
{ printf("%c",result[w]);
Result[w]=result[w];
}
Result[max]=NULL;
return Result;
}
int ArrayLength(char *p){
int length=0;
while(*p){
length++;
p++;
}
return length;
}
这里记录一下自己在写代码的时候出错很久才找出的bug:longestPalindrome的返回类型是char *,一开始我在函数里面想直接返回result数组,但是那样子返回的一直都是null,后来上网搜索,得知,返回的是以地址形式的字符串,那么返回的类型应该用static修饰,表示静态变量。或者可以直接定义char *result=malloc(1000),这个就是开辟了一块空间,但是这个方法返回有一个问题,就是我刚开始定义额时候是定义了一块比较大的空间,实际上返回的可能只有很少的字符,这个时候返回的还是1000个字符,显然是不对的,所以还是使用static较为合适。
用时比较长,仅以此作为参考。