求一个最长的回文字符串
例如
输入:s = "babad"
输出:"bab"
vm虚拟机上跑这个代码没问题,但是在力扣上运行代码就会堆溢出,实在是没看出来为什么,求大家帮忙看看
char * longestPalindrome(char * s){
char p_first=s,p_mid=NULL,p_last=NULL,p_tmp=NULL;
chararr=(char)malloc(10sizeof(char));//存放找到的回文字符
int length=strlen(s);
int len=0;//回文字符串的长度
if(strlen(s)<=1){//第一种情况,最开始两个字符是回文字,例如aabc中aa
return s;
}
while(p_last!='\0'){//遍历字符串中每一个字符
p_first=p_first+1;
p_mid=p_first+1;
p_last=p_mid+1;
if(*p_first==*p_last){//第一种情况,例如aabcbac中abcba,p_mid指向c
char*p_1=p_first,*p_2=p_mid,*p_3=p_last;
while(1){//让p_1向前走,p_2向后走,直到两个数值不同
p_1--;
p_3++;
if(*p_1!=*p_3||p_1==s||*p_3=='\0'){
if(p_3-p_1-1>len){
len=p_3-p_1-1;
for(int i=0;i<=p_3-p_1-2;i++){
arr[i]=*(p_1+1+i);
}
}
break;
}
}
}
if(*p_mid==*p_last){//第二种情况,例如aabccbad中abccba,p_mid和p_last分别指向两个c
char*p_4=p_first,*p_5=p_mid,*p_6=p_last;
p_6=p_6+1;//先让p_6向后走1位看看是否和p_first相等
if(*p_4==*p_6){//如果相等,重复循环直到不相等输出
while(1){
p_4--;
p_6++;
if(*p_4!=*p_6||p_4==s||*p_6=='\0'){
if(p_6-p_4-1>len){
len=p_6-p_4-1;
for(int i=0;i<=p_6-p_4-2;i++){
arr[i]=(p_4+1+i);
}
}
break;
}
}
}else{
if(len<2){
arr[0]=p_5;
arr[1]=(p_5+1);
len=2;
}
}
}
}
return arr;
}