leetcode[5]Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

class Solution {
public:
    string preProcess(string s)
    {
        string res;
        int n=s.length();
        if(0==n)
        {
            res="~@";
            return res;
        }
        res="~";
        for(int i=0;i<n;i++)
        res+="#"+s.substr(i,1);
        res+="#@";
        return res;
        
    }
    string longestPalindrome(string s) {
        string T=preProcess(s);
        int n=T.length();
        int *p=new int[n];
        int C=0;
        int R=0;
        for(int i=1;i<n-1;i++)
        {
            int i_mirror=2*C-i;
            p[i]=(R>i)?min(R-i,p[i_mirror]):0;
            while(T[i-p[i]-1]==T[i+p[i]+1])
            {
                p[i]++;
            }
            if(i+p[i]>R)
            {
                R=i+p[i];
                C=i;
            }
        }
        int maxlen=0;
        int center=0;
        for(int i=1;i<n-1;i++)
        {
            if(p[i]>maxlen)
            {
                maxlen=p[i];
                center=i;
            }
        }
        delete []p;
        return s.substr((center-1-maxlen)/2,maxlen);
    }
};

 

posted @ 2015-02-10 13:55  Vae永Silence  阅读(121)  评论(0编辑  收藏  举报