最长回文子串

String preProcess(String s) {
    String res = "$#";
    for (int i = 0; i < strlen(s), i ++) {
        res += s[i];
        res += "#";
    }
    res += "^";
    return res;
}

String longestPalindrome(String s1) {
    if(strlen(s1) <= 1)
        return s1;
    vector<int> p(n,0);
    s = preProcess(s1);
    int mx = 0, id = 0;
    for (int i = 0; i < strlen(s)-1; i ++) {
        p[i] = mx > i ? min(p[2*id], mx - i) : 1;
        while(s[i + p[i]] == s[i - p[i]]) p[i] ++;
        if(i + p[i] > max) {
            max = i + p[i]; 
            id = i;
        }
    } 

    int maxLen = 0, index = 0;
    for( int i = 0; i < strlen(s)-1; i++) {
        if(maxLen < p[i]){
            maxLne = p[i];
            index = i;
        }
    }
    return s.substr((index - maxLen)/2, maxLen -1);
}
原文地址:https://www.cnblogs.com/lichongjie/p/6927686.html