manecher

Posted xFANx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了manecher相关的知识,希望对你有一定的参考价值。

 

 

#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

char s[100];
int rd[100];

int manecher(char* s) {
    int len = strlen(s);
    for (int i = len - 1; i >= 0; i--) {
        s[i * 2 + 3] = #;
        s[i * 2 + 2] = s[i];
    }
    s[len * 2 + 2] = \0;
    s[1] = #;
    s[0] = $;
    memset(rd, 0, sizeof(rd));
    int right = 0;//右边界
    int cn = 0;//回文串中心
    for (int i = 1; i < 2 * len + 2; i++) {
        if (right > i) {
            rd[i] = min(rd[2 * cn - i], rd[cn] + cn - i);
        } else {
            rd[i] = 1;
        }
        while (s[i + rd[i]] == s[i - rd[i]]) rd[i]++;
        if (right > cn + rd[i]) {
            right = cn + rd[i];
            cn = i;
        }
    }
    int ans = 0;
    for (int i = 1; i < 2 * len + 2; i++) {
        ans = max(ans, rd[i] - 1);
    }
    return ans;

}

int main() {
    scanf("%s", s);
    printf("%d\n", manecher(s));
    return 0;
}

 

以上是关于manecher的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器