关于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个回答

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

qq_34790455
酱橙 我用dev c++能成功运行,那为什么提交上去又不行了?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐