酱橙 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

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站