关闭

hdu3068——最长回文

标签: c语言chduacm
670人阅读 评论(0) 收藏 举报
分类:

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 <algorithm>
#include <cstring>
#include <cmath>
#include <cstdio>
//#include <set>
#include <vector>
#include <iomanip>
#include <stack>
#include <map>
#include <queue>
#define MAXN 110010
#define mod 2012
#define INF 0x3f3f3f3f
using namespace std;
char Ma[MAXN*2];
int Mp[MAXN*2];
void Manacher(char s[],int len)
{
    int l=0;
    Ma[l++]='$';
    Ma[l++]='#';
    for(int i=0;i<len;++i)
    {
        Ma[l++]=s[i];
        Ma[l++]='#';
    }
    Ma[l]=0;
    int mx=0,id=0;
    for(int i=0;i<l;++i)
    {
        Mp[i]=mx>i?min(Mp[2*id-i],mx-i):1;
        while(Ma[i+Mp[i]]==Ma[i-Mp[i]]) Mp[i]++;
        if(i+Mp[i]>mx)
        {
            mx=i+Mp[i];
            id=i;
        }
    }
}
char s[MAXN];
int main()
{
    ios::sync_with_stdio(false);
    while(cin>>s)
    {
        int len=strlen(s);
        Manacher(s,len);
        int ans=0;
        for(int i=0;i<2*len+2;i++)
            ans=max(ans,Mp[i]-1);
        cout<<ans<<endl;
    }
    return 0;
}
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

hdu3068(最长回文串)

就是在一个字符串中找到最长回文串 先将回文串扩展,这样无论n为奇偶扩展后都为偶数 abcgcr-> #a#b#c#g#c#r# 然后建立一个数组,含义是当前位置的回文字符个数 #  a  #   b  #   c  ...
  • qq_31607947
  • qq_31607947
  • 2017-07-13 11:45
  • 54

Manacher(hdu3068最长回文)

浅谈manacher算法 manacher算法是我在网上无意中找到的,主要是用来求某个字符串的最长回文子串. 不过网上的版本还不太成熟,我就修改了下. 不要被manacher这个名字吓倒了,其实manacher算法很简单,也很容易理解,程序短,时间复杂度为O(n). 求最长回文子串这个问题,...
  • qq_35640373
  • qq_35640373
  • 2017-04-14 09:43
  • 71

hdu3068(最长回文manacher)

最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7247  &#...
  • u014569598
  • u014569598
  • 2014-06-05 23:29
  • 408

【HDU3068】【模板】最长回文

【模板】Manacher
  • sdfzchy
  • sdfzchy
  • 2017-05-28 23:16
  • 140

HDU3068 最长回文

HDU3068 最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 16036 &...
  • FSAHFGSADHSAKNDAS
  • FSAHFGSADHSAKNDAS
  • 2016-07-21 01:43
  • 207

LintCode python 小白-简单题-627最长回文串

题目:给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,”Aa” 并不会被认为是一个回文串。假设字符串的长度不会超过 1010。样例:给出 s = “abccccdd” 返回 7
  • xiongxu3381
  • xiongxu3381
  • 2017-07-26 23:17
  • 540

字符串中查找最长回文子串完整代码

参考原文:http://blog.csdn.net/yzl_rex/article/details/7908259 #include #include #include int Min(int a,int b) { return ((a-b)?b:a); } char* huiwen(c...
  • fenglifeng1987
  • fenglifeng1987
  • 2013-08-20 08:29
  • 3205

提取最长回文子串的java实现

题目描述 给定一个字符串,找出该字符串的最长回文子串。回文字符串指的就是从左右两边看都一样的字符串,如aba,cddc都是回文字符串。字符串abbacdc存在的回文子串有abba和cdc,因此它的最长回文子串为abba。
  • hanleijun
  • hanleijun
  • 2014-05-09 22:02
  • 3574

算法导论-第15章-动态规划-15-2 最长回文子序列(LPS)

问题描述 回文序列(Palindromic sequence, Palindrome)是指正向遍历和反向遍历完全相同的序列,例如字符串“AAAAA”显然是一个回文序列,又如字符串“ABC@CBA”也是一个回文序列。现在,我们要在一个(字符)序列中找出最长回文子序列的长度。例如字符序列"BB...
  • u012243115
  • u012243115
  • 2014-11-11 14:11
  • 3018

最长回文子串

之前注册过hihoCoder,现在看到推出编程
  • KangRoger
  • KangRoger
  • 2014-07-13 22:38
  • 39825
    个人资料
    • 访问:380886次
    • 积分:10836
    • 等级:
    • 排名:第1750名
    • 原创:675篇
    • 转载:2篇
    • 译文:0篇
    • 评论:115条
    博主信箱
    博客专栏
    文章分类
    最新评论