最长回文子串

给定一个字符串 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;
}

 

posted @ 2018-07-15 21:35  onlyandonly  阅读(98)  评论(0编辑  收藏  举报