鹏hoho 2022-07-14 20:55 采纳率: 0%
浏览 40

力扣运行代码堆溢出,ubuntu上没问题

求一个最长的回文字符串
例如
输入:s = "babad"
输出:"bab"
vm虚拟机上跑这个代码没问题,但是在力扣上运行代码就会堆溢出,实在是没看出来为什么,求大家帮忙看看

char * longestPalindrome(char * s){
char p_first=s,p_mid=NULL,p_last=NULL,p_tmp=NULL;
char
arr=(char
)malloc(10
sizeof(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;
}

  • 写回答

2条回答 默认 最新

  • 蛋糕店筹备中 2022-07-14 21:04
    关注
    
    chararr=(char)malloc(10*sizeof(char));//这里是不是10后面少了个*
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月14日

悬赏问题

  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决