码迷,mamicode.com
首页 > 其他好文 > 详细

最长回文子串

时间:2018-07-15 22:16:03      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:++   long   else   for   一点   div   realloc   示例   return   

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

示例 1:

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

示例 2:

输入: "cbbd"
输出: "bb"

这条题的思路主要是从一个或两个字符开始往两边遍历,直到遍历出最长的回文字符串为止。

问题就出来这个从一个字符还是两个字符开始了。。开始弄了好几个条件,结果递归算一下发现靠控制条件要控到十万八千里远。。。

后来我的办法就是,先从一个字符开始遍历,完了之后看一下能不能从两个字符开始,能就再做一遍遍历。。。

还有一点要注意的是,realloc之前一定要先赋值,不然就干瞪眼吧。。

char* longestPalindrome(char* s)
{
    int len,maxlen=0;
    char *l,*r,*head=s;
    int i,j;
    char *rtn=0;
    while(*s)
    {
        len=-1;
        l=s;
        r=s;
        for(j=0;j<2;j++)
        {
            do{
                if(*l!=*r)
                    break;
                else
                    len+=2;
            }while(l--!=head&&*r++!=\0);
            if(len>maxlen)
            {
                maxlen=len;
                rtn=(char *)realloc(rtn,sizeof(char)*(len+1));
                for(i=0; i<len; i++)
                    rtn[i]=l[i+1];
                rtn[len]=\0;
            }
            if(*s!=*(s+1))
                break;
            else
            {
                l=s;
                r=s+1;
                len=0;
            }
        }
        s++;
    }
    return rtn;
}

 

最长回文子串

标签:++   long   else   for   一点   div   realloc   示例   return   

原文地址:https://www.cnblogs.com/onlyandonly/p/9314913.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!