Manacher 模板

来源:互联网 发布:无限极网络电视盒 编辑:程序博客网 时间:2024/06/15 06:36

测试题目:

const int maxn = 500;int dis[maxn];char str1[maxn],str2[maxn];int get_dis(){    int len = strlen(str1);    str2[0] = '$';    char* str_a = str2 + 1;    for(int i = 0;i <= len;++i){        str_a[i * 2] = '#';        str_a[i * 2 + 1] = str1[i];    }    int id = 0, mx = 1,len2 = strlen(str2);    for(int i = 1;i < len2;++i){        if(mx > i){            dis[i] = (dis[id * 2 - i] < (mx - i) ? dis[2 * id - i] : (mx - i));        }        else dis[i] = 1;        while(str2[i - dis[i]] == str2[i + dis[i]]) dis[i]++;        if(i + dis[i] > mx){        mx = i + dis[i];            id = i;        }    }    return len2;}
0 0