manacher算法模板
来源:互联网 发布:贴图软件 编辑:程序博客网 时间:2024/06/05 07:21
内存较大的:
#include <iostream> #include <algorithm> #include <cstdio> #include <cstring> #include <string> using namespace std; #define inf 310010 char s[inf], str[inf]; int p[inf], len; void gets() { int li = strlen(str); len = 0; s[len++] = '&'; s[len++] = '#'; for(int i=0; i<li; i++) { s[len++] = str[i]; s[len++] = '#'; } } void getp() { gets(); memset(p, 0, sizeof(p)); int id = 0, mx = 0; for(int i=1; i<len; i++) { int j = 2*id-i; p[i] = mx>i ? min(p[j], mx-i):1; while(s[i+p[i]] == s[i-p[i]]) p[i]++; if(i+p[i] > mx) { mx = i+p[i]; id = i; } } } int main() { while(~scanf("%s", str)) { getp(); int ans=1; for(int i=0; i<len; i++) ans = max(ans, p[i]-1); printf("%d\n", ans); } return 0; }
内存较小的:
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;const int N = 2000010;int n;char s[N];int d1[N], d2[N];//d1[]记录的是奇数,d2[]记录的是偶数 int main() { scanf("%d", &n); scanf("%s", s); for (int i = 0, l = 0, r = -1; i < n; ++i) { d1[i] = (i <= r ? min(d1[l + r - i], r - i + 1) : 1); while (i - d1[i] >= 0 && i + d1[i] < n && s[i - d1[i]] == s[i + d1[i]]) ++d1[i]; if (i + d1[i] - 1 > r) l = i - d1[i] + 1, r = i + d1[i] - 1; } for (int i = 1, l = 0, r = -1; i < n; ++i) { d2[i] = (i <= r ? min(d2[l + r - i + 1], r - i + 1) : 0); while (i + d2[i] < n && i - d2[i] - 1 >= 0 && s[i + d2[i]] == s[i - d2[i] - 1]) ++d2[i]; if (d2[i] > 0 && i + d2[i] - 1 > r) l = i - d2[i], r = i + d2[i] - 1; } int ans = 0; for(int i = 0; i < n; i++) { cout<<i<<" "<<d1[i]<<" "<<d2[i]<<endl; ans = max(ans, max(d1[i]*2-1, d2[i]*2)); } printf("%d\n", ans); return 0;}/*9abcbaccab0 1 01 1 02 3 03 1 04 1 05 1 06 1 37 1 08 1 06*/
0 0
- manacher算法模板
- hdu3068 manacher算法模板
- Manacher 算法模板
- manacher算法模板
- Manacher 算法模板
- [模板]manacher算法
- 【笔记+模板】 manacher算法
- hdu-3068 Manacher算法模板
- manacher算法模板程序 HDOJ3068
- 算法模板——Manacher
- 算法模板——manacher算法
- POJ - 3974 Palindrome(Manacher算法模板题)
- HDU 3068 最长回文(manacher算法模板)
- 最长回文串manacher算法模板
- HDU 3064 最长回文 manacher算法模板
- POJ 3974 Manacher算法(模板)
- 【模板】Manacher 算法 最长回文子串
- manacher模板
- uva1025 A Spy in the Metro
- Mybatis的<where><foreach><set>等标签详解
- WebView的使用
- Expressbody-parser(四)
- Spring+Spring MVC+Mybatis+Maven搭建多模块项目(二)
- manacher算法模板
- Apache POI简单操作
- 正则表达式 高级规则——四(贪婪与非贪婪)
- 01—MAC中屏幕四个角的触发事件
- linux 循环设备 loop device操作实践
- 服务器端代码解析
- Android Studio如何配置adb以及常用命令
- java利用SHA1withRSA进行签名与验签
- 差点被坑死,Fragment onAttach方法没有被调用