酱橙 2016-10-14 12:10 采纳率: 0%
浏览 1013

关于leetcode中5.最长回文字符串的问题

代码目的:找到字符串s中,最长的唯一回文字符串。
我写的代码能在dev c++中运行并找到正确结果,可是提交到leetcode中,显示runtime error,并显示“bb”无法识别。dev c++中测试可以识别。
另外用vs2012编译运行,会报错“已触发了一个断点。”检测发现在free()函数之后的语句无法正常执行。请问问题在哪里?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char* longestPalindrome(char* s);

int main()
{
    char s[] = "bb";
    char *longs;

    longs = longestPalindrome( s );
    printf("%s length = %d\n", longs, strlen(longs));

    return 0;
}


char* longestPalindrome(char* s)
{
    int i, j, cnt=0, k;
    char *ts, *ns;      //用于保存回文的指针 

    if( strlen(s) == 1 )        //当字符串长度为1时,直接返回 
        return s;

    /*对称位置比较,找以s[0]为开头的回文字符串,最长为整个字符串,最短为s[0]本身。*/ 
    for( i=0, j=strlen(s)-1; i<=j; i++, j--){
        //i表示s的首字符下标,j表示s的尾字符下标 

        if( s[i] == s[j] ){     //s[i]与s[j]相等时,分三种情况 
            if( i == j ){       //第一种,i=j,即搜索到回奇数长度的文字符串的中间字符
                ns = (char*)malloc((i*2+2)*sizeof(char));
                for( k=0; k<i*2+1; k++)     //申请内存,保存该字符串到ns 
                    ns[k] = s[k];
                ns[k] = '\0';
                ts = longestPalindrome(++s);    //以s字符串第二个字符为首,递归调用,把返回的字符串赋给指针ts 
                break;
            }

            else if( i+1 == j ){        //第二种,i=j,即搜索到回偶数长度的文字符串的中间两个字符
                ns = (char*)malloc((j*2+1)*sizeof(char));
                for( k=0; k<j*2; k++)
                    ns[k] = s[k];
                ns[k] = '\0';
                ts = longestPalindrome(++s);
                break;
            }

            else        //第三中,单纯的对称位置字符相同 
                continue;
        }

        else{       //当s[i]不等于s[j],即对称位置字符不同 
            cnt++;
            i = -1;     //i在这次循环结束后,会执行i++,则i=0 
            j = strlen(s) - cnt;        //j从末尾依次往前推 
        }
    }

    if( strlen(ns) < strlen(ts) ){      //比较字符串ns和返回字符串ts的长度,返回长度大的字符串 
        free(ns);
        return ts;
    }
    else{
        free(ts);
        return ns;
    }
}
  • 写回答

1条回答 默认 最新

  • threenewbee 2016-10-14 12:33
    关注

    leetcode使用gcc,所以你调试程序也用gcc,不要用vc

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?