Manacher模版

来源:互联网 发布:广西电视台有网络点播 编辑:程序博客网 时间:2024/05/22 06:46

求字符串中出现过的最长回文子串

const int MAXN = 110010;//字符串长度<MAXNchar Ma[MAXN * 2];int Mp[MAXN * 2];int Manacher(char s[]) {int l = 0, len = strlen(s);Ma[l++] = '$';Ma[l++] = '#';for (int i = 0; i<len; i++)  {Ma[l++] = s[i];Ma[l++] = '#';}Ma[l] = 0;int mx = 0, id = 0;for (int i = 0; i<l; i++)  {Mp[i] = mx>i ? min(Mp[2 * id - i], mx - i) : 1;while (Ma[i + Mp[i]] == Ma[i - Mp[i]])Mp[i]++;if (i + Mp[i]>mx)   {mx = i + Mp[i];    id = i;}}int ans = 0;for (int i = 0; i<2 * len + 2; i++)ans = max(ans, Mp[i] - 1);return ans;}


0 0
原创粉丝点击