最长回文串 O(n)复杂度(manacher算法)

manacher算法:点击打开链接

邝斌模板:

void Manacher(int len){
    int l = 0;
    s[l++] = 1;
    s[l++] = 2;
    for(int i = 0;i < len;i ++){
        s[l++] = line[i];
        s[l++] = 2;
    }

    int id = 0, mx = 0;
    for(int i = 1;i < l;i ++){
        Mp[i] = mx > i ? min(Mp[2*id-i],mx-i) : 1;
        while(s[i + Mp[i]] == s[i - Mp[i]])   Mp[i]++;
        if(i + Mp[i] > mx){
            mx = i+Mp[i];
            id = i;
        }
    }
}



 

posted on 2016-05-20 00:06  Jstyle  阅读(192)  评论(0编辑  收藏  举报

导航