manacher hihoCoder1032 最长回文子串
2015-08-13 22:30
344 查看
竟然可以做到O(n)的复杂度求最长回文,,也是给跪了。
下面这个人把manacher讲的非常好,,可以看看
http://blog.csdn.net/xingyeyongheng/article/details/9310555
我就照着他的代码敲了一遍贴了个模板。。
下面这个人把manacher讲的非常好,,可以看看
http://blog.csdn.net/xingyeyongheng/article/details/9310555
我就照着他的代码敲了一遍贴了个模板。。
#include<map> #include<set> #include<cmath> #include<stack> #include<queue> #include<cstdio> #include<string> #include<vector> #include<cstring> #include<iostream> #include<algorithm> #include<functional> using namespace std; const int MX = 1e6 + 5; char s[MX * 2];//记得要开两倍 int p[MX * 2]; int manacher(char *s){ int len = strlen(s), id = 0, ans = 0; for(int i = len; i >= 0; i--) { s[i + i + 2] = s[i]; s[i + i + 1] = '#'; } s[0] = '*';//防越界,很重要!! for(int i = 2; i < 2 * len + 1; ++i) { if(p[id] + id > i) p[i] = min(p[2 * id - i], p[id] + id - i); else p[i] = 1; while(s[i - p[i]] == s[i + p[i]]) p[i]++; if(id + p[id] < i + p[i]) id = i; ans = max(ans, p[i] - 1); } return ans; } int main() { int T; scanf("%d", &T); while(T--) { scanf("%s", s); printf("%d\n", manacher(s)); } return 0; }
相关文章推荐
- 【HDU3943】【K-th Nya Number】【数位+二分找位置】
- Havok_2014-1-0_Pc_Xs_User_Guide(1.5.7-计时器)
- 工厂模式
- RADOS工作原理
- angularJs 过滤器
- POJ 2262 Goldbach's Conjecture(哥德巴赫猜想)
- 高级组件之自动完成文本框
- 【HDU】5390 tree【线段树套字典树】
- java 文件操作 读取txt文本(兄弟常开心)
- 教你怎么把一天24小时变成48小时?
- UIViewController _loadViewFromNibNamed:bundle:
- Linux时间子系统之四:定时器的引擎:clock_event_device
- 【POJ 1836】 Alignment
- URAL 1784 K - Rounders 找规律
- 部分真题整理
- TCP并发服务器
- web service—底层调用本质+WSDL文档解析
- HDU1253-胜利大逃亡
- 选择排序SelectSort
- 创建表空间