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

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

 

    

Time Limit: 15000MS   Memory Limit: 65536K
Total Submissions: 5121   Accepted: 1834

Description

Andy the smart computer science student was attending an algorithms class when the professor asked the students a simple question, "Can you propose an efficient algorithm to find the length of the largest palindrome in a string?" 
A string is said to be a palindrome if it reads the same both forwards and backwards, for example "madam" is a palindrome while "acm" is not. 
The students recognized that this is a classical problem but couldn't come up with a solution better than iterating over all substrings and checking whether they are palindrome or not, obviously this algorithm is not efficient at all, after a while Andy raised his hand and said "Okay, I've a better algorithm" and before he starts to explain his idea he stopped for a moment and then said "Well, I've an even better algorithm!". 
If you think you know Andy's final solution then prove it! Given a string of at most 1000000 characters find and print the length of the largest palindrome inside this string.

Input

Your program will be tested on at most 30 test cases, each test case is given as a string of at most 1000000 lowercase characters on a line by itself. The input is terminated by a line that starts with the string "END" (quotes for clarity). 

Output

For each test case in the input print the test case number and the length of the largest palindrome. 

Sample Input

abcbabcbabcbaabacacbaaaabEND

Sample Output

Case 1: 13Case 2: 6

Source

 

 

关于manacher算法..........()

   代码:

  

1 #include
2 #include
3 #include
4 #include
5 #define maxn 1000010 6 char ss[maxn]; 7 char str[maxn << 1L]; 8 int var[maxn << 1L]; 9 10 int manacher() {11 12 13 int len = 2, mx_l = 0, pos = 0;14 str[0] = '$';15 str[1] = '#';16 for (int i = 0; ss[i] != '\0'; i++) {17 str[len++] = ss[i];18 str[len++] = '#';19 }20 str[len] = '\0';21 for (int i = 0; i
i ? std::min(var[2 * pos - i], mx_l - i) : 1;23 while (str[i + var[i]] == str[i - var[i]])++var[i];24 if (mx_l

 

转载地址:http://tdlta.baihongyu.com/

你可能感兴趣的文章
PHP高级编程之守护进程,实现优雅重启
查看>>
PHP字符编码转换类3
查看>>
rsync同步服务配置手记
查看>>
http缓存知识
查看>>
Go 时间交并集小工具
查看>>
iOS 多线程总结
查看>>
webpack是如何实现前端模块化的
查看>>
TCP的三次握手四次挥手
查看>>
关于redis的几件小事(六)redis的持久化
查看>>
webpack4+babel7+eslint+editorconfig+react-hot-loader 搭建react开发环境
查看>>
Maven 插件
查看>>
初探Angular6.x---进入用户编辑模块
查看>>
计算机基础知识复习
查看>>
【前端词典】实现 Canvas 下雪背景引发的性能思考
查看>>
大佬是怎么思考设计MySQL优化方案的?
查看>>
<三体> 给岁月以文明, 给时光以生命
查看>>
Android开发 - 掌握ConstraintLayout(九)分组(Group)
查看>>
springboot+logback日志异步数据库
查看>>
Typescript教程之函数
查看>>
Android 高效安全加载图片
查看>>