HDU
来源:互联网 发布:sql setup.exe打不开 编辑:程序博客网 时间:2024/06/02 05:37
题意
给出一个只由小写英文字符a,b,c…y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
思路
马拉车模板题
链接
https://cn.vjudge.net/contest/177933#problem/H
代码
#include<cstdio>#include<iostream>#include<cstring>using namespace std;const int maxn = 3e5;char str0[maxn], str1[maxn];int p[maxn];int pro(){ int len = 0; str1[len++] = '$'; for(int i = 0; str0[i] != '\0'; i++) { str1[len++] = '#'; str1[len++] = str0[i]; } str1[len++] = '#'; str1[len] = '\0'; return len;}void manacher(int len){ int mx = 0, id = 0; for(int i = 0; i < len; i++) { if(i <= mx) p[i] = min(p[2 * id - i], mx - i); else p[i] = 1; while(str1[i + p[i]] == str1[i - p[i]]) p[i]++; if(mx < i + p[i]) { mx = i + p[i]; id = i; } }}int main(){// freopen("in.txt", "r", stdin); while(scanf(" %s", str0) != EOF) { memset(p, 0, sizeof p); int len = pro(); manacher(len); int res = 0; for(int i = 0; i < len; i++) { res = max(res, p[i]-1); } cout << res << endl; }}
阅读全文
0 0