<leetcode>NO.5最长回文字符串

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

示例 2:

输入: "cbbd"
输出: "bb"
char * longestPalindrome(char * s){
    int max_level=0;//回文字符串长度
    int max_position=0;
    int tmp_level=1;
    int center_position=0;//回文字符串长度 回文字符串中心位置
    int total_len=strlen(s);

    if(total_len<1||total_len>1000)return "";
    while(center_position+max_level/2<total_len&&center_position+tmp_level/2<total_len)
    {//
        if(center_position-(tmp_level-1)/2<0)
        {
            center_position++;
            continue;
        }
        int find=1;
        for(int left=center_position-(tmp_level-1)/2,right=center_position+tmp_level/2;left<=right;left++,right--)
        {
            if(s[left]!=s[right])
            {
                find=0;
                break;
            }
        }
        if(0==find)
        {
            tmp_level++;
            if(center_position+tmp_level/2<total_len&&(center_position-(tmp_level-1)/2)>=0)
            {
                find=1;
                for(int left=center_position-(tmp_level-1)/2,right=center_position+tmp_level/2;left<=right;left++,right--)
                {
                    if(s[left]!=s[right])
                    {
                        find=0;
                        break;
                    }
                }
            }
        }
        if(find)
        {
            find=0;

            printf("center_position:%d max_level %d tmp_level %d   \n",center_position,max_level,tmp_level);
            max_level=tmp_level;
            max_position=center_position;
        }
        else
        {
            center_position++;
        }
        tmp_level=max_level+1;
    }
    if(max_level==0)return "";
    char *return_str=(char *)malloc ((max_level+1)*sizeof(char));
    strncpy(return_str,s+max_position-(max_level-1)/2,max_level);
    return_str[max_level]='\0';
    return return_str;
}

执行用时 : 20 ms, 在Longest Palindromic Substring的C提交中击败了91.09% 的用户

内存消耗 : 7.2 MB, 在Longest Palindromic Substring的C提交中击败了80.99% 的用户

提交过程中出现了几个问题:

1.一开始分配了一块大小为字符串长度的内存存储回文字符串,提示堆溢出,保存位置最后再计算回文字符串则消除该错误

2.忽略了单字符的情况

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值