最长回文

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 31611    Accepted Submission(s): 11618

Problem Description
给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.
回文就是正反读都是一样的字符串,如aba, abba等
Input
输入有多组case,不超过120组,每组输入为一行小写英文字符a,b,c...y,z组成的字符串S
两组case之间由空行隔开(该空行不用处理)
字符串长度len <= 110000
Output
每一行一个整数x,对应一组case,表示该组case的字符串中所包含的最长回文长度.
Sample Input
aaaa
abab

Sample Output
4
3
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
//最长回文,Manacher算法
char s[211000],c[111000];//注意S数组的大小至少要开C数组的两倍
int p[211000];//P可以理解为回文字符串的半径void init()//初始化S数组
{int i,j;s[0]='@';for(i=0;c[i]!=0;i++){s[2*i+1]='#';s[2*i+2]=c[i];}s[2*i+1]='#';s[2*i+2]=0;
}
int manacher()
{int id=0,mx=0,i;for(i=1;s[i]!=0;i++){if(mx>i)p[i]=min(p[2*id-i],mx-i);elsep[i]=1;//p[i]=mx>i?min(p[2*id-i],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;}}mx=0;for(i=1;s[i]!=0;i++){if(p[i]>mx)mx=p[i];}return mx-1;
}
int main()//用cin\cout 会超时
{while(~scanf("%s",c)){init();printf("%d\n",manacher());}return 0;
}

转载于:https://www.cnblogs.com/-citywall123/p/10034374.html

hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法相关推荐

  1. 计算给定字符串中最长回文子串的长度(或查找最长回文子串)

    题目描述 对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度. 给定字符串A以及它的长度n,请返回最长回文子串的长度. 测试样例: "abc1234321ab",12 ...

  2. 【回文字符串】 最长回文子串O(N) Manacher算法

    原理讲的清晰:Manacher's ALGORITHM: O(n)时间求字符串的最长回文子串 注意: ①动态生命P[]和newStr数组后,不要忘记delete[] //其实这是基本的编码习惯 ②最终 ...

  3. 51NOD 1088 最长回文子串1089 最长回文子串 V2(Manacher算法)

    回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. Input 输入Str(Str的长度 <= 1000(第二题要 ...

  4. Java字符串中最长回文子字符串

    Longest palindrome substring in a string is a very common java interview question. To find out the l ...

  5. 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )

    1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...

  6. JS 找出字符串中最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: "bab" 注意: &qu ...

  7. 怎么判断一个字符串的最长回文子串是否在头尾_最长回文字串/子序列问题(leetcode5,9,519)

    leetcode 5 最长回文子串 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad" 输出: " ...

  8. 最长回文 HDU - 3068(求最长回文串的长度【马拉车算法Manacher】)

    马拉车算法 Manacher's Algorithm 是用来查找一个字符串的最长回文子串的线性方法,由一个叫 Manacher 的人在 1975 年发明的,这个方法的最大贡献是在于将时间复杂度提升到了 ...

  9. java最长回文子序列_算法--字符串:最长回文子序列

    转自:labuladong公众号 子序列问题是常见的算法问题,而且并不好解决. 首先,子序列问题本身就相对子串.子数组更困难一些,因为前者是不连续的序列,而后两者是连续的,就算穷举都不容易,更别说求解 ...

  10. leetCode第五题-求字符串最长回文字符串

    原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...

最新文章

  1. 语义分割--Pixel Deconvolutional Networks
  2. Web性能压力测试工具——Siege详解
  3. svn +nginx
  4. elasticsearch查询及logstash简介
  5. 【最优解法】1030 完美数列 (25分)_23行代码AC
  6. java 把string转为keyevent_盘点现在Java强大第三方库(字符串操作),程序员都该知道!...
  7. beautifulsoup获取属性_Python爬虫常用模块:BeautifulSoup
  8. 【Elasticsearch】Elasticsearch filter和query的不同
  9. torch.backends.cudnn.enabled = False会引起CUDA out of memory和CUDA error: an illegal memory access was
  10. 李宏毅机器学习——深度学习的Tips
  11. 结构化数据与非结构化数据理解
  12. 批量建立域帐号,摆脱管理员的痛!(原创+实战)
  13. 下载编译LineageOS代码
  14. OGNL表达式学习笔记
  15. 林子雨大数据java练习
  16. 计算机本科生毕业设计题目(三)
  17. 把计算机怎么连接手机的网络助手在哪里,手机如何连接电脑上网
  18. 教你用Python写连连看外挂(滑稽)
  19. codeforces_946D_Timetable(分组背包)
  20. hsk内网穿透+SERV-U+搭建FTP服务器+并实现外网访问

热门文章

  1. JAVA CLASS混淆工具:JShrink简单试用
  2. 分内外网,下载个东西真不方便,一肚子火
  3. VirtualBox中,WIN虚拟机与WIN共享文件夹
  4. LINUX开机,直接进入终端,如何加载硬盘
  5. 研发中,问题以界面开发人员为解决负责人
  6. VS Newtonsoft的引用问题
  7. html代码不安全,安全 – HTML编码是否会阻止各种XSS攻击?
  8. python环境下数据操作_在windows环境下使用Python操作spatialite数据库
  9. thinkphppaginate.php,thinkphp如何使用paginate及其参数示例使用
  10. eplan单线原理图多线原理图_EPLAN-文本