最长回文串——Manacher模板

来源:互联网 发布:九品网络电视安卓9ptv 编辑:程序博客网 时间:2024/06/06 07:51

#include <cstring>#define Max 2505char s[Max] ;char str[Max] ;int rad[Max] ;int manacher () {    int len = strlen(s) ;    int max = 0;    str[0] = '$';    str[1] = '#';    int i = 0  ;    for (; i < len; i++) {        str[i * 2 + 2] = s[i];        str[i * 2 + 3] = '#';    }    str[2 * len + 2] = 0;    for (int i = 1; i < 2 * len + 2 ; i++) {        rad[i] = 0;    }    int id = 0;    for (i = 1; i < 2 * len + 2; i++) {        if (max > i)            rad[i] = min(rad[2 * id - i], rad[id] + id - i) ;        else            rad[i] = 1 ;        while (str[i + rad[i]] == str[i - rad[i]])            rad[i] ++ ;        if (rad[i] + i > max) {            max = rad[i] + i;            id = i;        }    }    int mx = 0;    for (i = 1; i < 2 * len + 2 ; i++) {        if (mx < rad[i] - 1)            mx = rad[i] - 1;    }    return mx;}

别人的代码,目前测试过了一道简单题

转自:http://blog.csdn.net/acm_baihuzi/article/details/41704583

0 0
原创粉丝点击