LeetCode-5. 最长回文子串(Manacher)

5. 最长回文子串

题目描述

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

示例 1:

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

示例 2:

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

C




#include
using namespace std;
/********************提交代码********************/
char* longestPalindrome(char* s)
{
    int i,n=0,len=strlen(s);
    char *str=(char*)malloc((3*len)*sizeof(char));
    int *p=(int*)malloc((3*len)*sizeof(int));
    str[n++]='$';//加入字符串首部的字符串
    for(i=0; s[i]; i++)
    {
        str[n++]='#';
        str[n++]=s[i];
    }
    str[n++]='#';
    str[n]='\0';
    int mx=0,id,pos=0,r=0,val=0;;
    p[0]=0;
    for(i=1; ii)
            if(p[2*id-i]mx)//记录目前回文字符串扩展最长的id
        {
            mx=p[i]+i;
            id=i;
        }
        if(p[i]>r)
            r=p[i],pos=i;
    }
    int cnt=0;
    val=(r-1);//最长回文串的长度
    pos/=2;//回文串中心位置
    char *ans=(char*)malloc((val+1)*sizeof(char));
    if(val%2)
        for(i=pos-val/2-1; i


最惨的是因为ans结尾没加\0在OJ上结尾会有多余输出卡了好久……┭┮﹏┭┮

Manacher-求最长回文字符串 基本就是这个代码改的,On的复杂度。

输出是截取字符串起始位置是:中心点坐标-最大长度/2

你可能感兴趣的:(LeetCode)