博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3974 Palindrome(最长回文子串)
阅读量:6978 次
发布时间:2019-06-27

本文共 1232 字,大约阅读时间需要 4 分钟。

题目链接:http://poj.org/problem?id=3974

题意:求一给定字符串最长回文子串的长度

思路:直接套模板manacher算法

code:

1 #include 
2 #include
3 #include
4 using namespace std; 5 const int MAXN = 1000010; 6 char Ma[2*MAXN]; 7 int Mp[2*MAXN]; 8 9 void Manacher(char s[], int len)10 {11 int l = 0;12 Ma[l++] = 'S';13 Ma[l++] = '#';14 for (int i = 0; i < len; ++i)15 {16 Ma[l++] = s[i];17 Ma[l++] = '#';18 }19 Ma[l] = 0;20 int mx = 0;21 int id = 0;22 for (int i = 0; i < l; ++i)23 {24 Mp[i] = mx > i ? min(Mp[2*id-i], mx-i) : 1;25 while (Ma[i+Mp[i]] == Ma[i-Mp[i]]) ++Mp[i];26 if (i + Mp[i] > mx)27 {28 mx = i +Mp[i];29 id = i;30 }31 }32 }33 34 char s[MAXN];35 36 int main()37 {38 int cnt = 0;39 while (scanf("%s", s) != EOF)40 {41 if (strcmp(s, "END") == 0) break;42 int len = strlen(s);43 Manacher(s, len);44 int ans = 0;45 len = 2 * len + 2;46 for (int i = 0; i < len; ++i) ans = max(ans, Mp[i] - 1);47 printf("Case %d: %d\n",++cnt, ans);48 }49 return 0;50 }

 

转载于:https://www.cnblogs.com/ykzou/p/4462941.html

你可能感兴趣的文章
cacti监控机硬盘满了,于是mysql的表损坏了,通过查看cacti日志的报错信息,搜索到解决办法...
查看>>
zoj——3195 Design the city
查看>>
httpd服务相关实验
查看>>
新手小白 python之路 Day1 (三级菜单功能实现)
查看>>
【基础复习】二:预处理、const与sizeof
查看>>
二分查找
查看>>
小公司程序员怎么进大公司
查看>>
PS 拉伸大长腿
查看>>
cheat engine lua
查看>>
软件架构设计学习总结(1):标准Web系统的架构分层
查看>>
JPA 复杂查询 - Querydsl
查看>>
Alipay秘钥问题
查看>>
workerman结合laravel开发在线聊天应用的示例代码
查看>>
程序员新手 0年份等级 指导(一) 开发人员IT架构总览
查看>>
poj 2063完全背包
查看>>
Least Common Ancestors 分类: ACM TYPE ...
查看>>
数据结构之快速排序
查看>>
《代码敲不队》第八次团队作业:Alpha冲刺 第二天
查看>>
如何在JSP页面中获取当前系统时间<转>
查看>>
Java并发编程-信号量
查看>>