LeetCode 5. Longest Palindromic Substring(manager算法)

裸的manager算法。
代码如下:

class Solution {
public:
    string longestPalindrome(string s) {

        string r;
        r += '#';
        for(int i=0; i<s.size(); ++ i)
        {
            r += s[i];
            r += '#';
        }

        int arr[r.size() + 1];
        memset(arr, 0, sizeof(arr));
        int mx = 0, id;
        for(int i=1; i<r.size()-1; ++ i)
        {
            if(mx > i)
                arr[i] = min(arr[2*id - i], mx-i);
            else
                arr[i] = 1;

            while(i + arr[i] < r.size() && r[i + arr[i]] == r[i - arr[i]])
                arr[i] ++;

            if(i + arr[i] > mx)
            {
                mx = i + arr[i];
                id = i;
            }
        }

        mx = 0;
        for(int i=1; i<r.size()-1; ++ i)
            if(arr[i] > arr[mx])
                mx = i;

        if(mx & 1)
            return s.substr(mx/2-(arr[mx]/2-1), arr[mx]-1);
        else
            return s.substr(mx/2-arr[mx]/2, arr[mx]-1);
    }
};
posted @ 2017-03-04 17:09  aiterator  阅读(121)  评论(0编辑  收藏  举报