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);

    }

};

 

你可能感兴趣的:(substring)