最长回文子串

原创 2015年07月06日 19:37:18
#include<iostream>
#include<cstdio>
#include<string.h>
#include<cstring>
#include<string>
#include<stack>
#include<set>
#include<algorithm>
#include<cmath>
#include<vector>
#include<map>

#define LOCAL
#define ll long long
#define lll unsigned long long
#define MAX 1000009
#define eps 1e-8
#define INF 0x7fffffff
#define mod 1000000007

using namespace std;
/*

题意:

想法:Manacher算法

PS:http://taop.marchtea.com/01.05.html

*/

int p[MAX*2],mx ,id ;
char str[2*MAX];
char s[MAX];

void Manacher()
{
    mx  = 0;
    id = 0;
    memset(p,0,sizeof(p));
    for(int i = 1;str[i]!='\0';i++)
    {
        p[i] = mx>i?min(p[2*id - i],mx - i) : 1;
        while(str[i + p[i]] == str[i - p[i]] )
        {
            p[i]++;
        }
        if(i + p[i] > mx)
        {
            mx = i + p[i];
            id = i;
        }
    }
}
int main()
{
    //freopen("date.in","r",stdin);
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%s",s);
        int len = strlen(s);
        str[0] = '$';
        str[1] = '#';
        for(int i = 0;i<len;i++)
        {
            str[(i<<1) + 2] = s[i];
            str[(i<<1) + 3] = '#';
        }
        len = 2*len + 2;
        str[len] = '\0';
        Manacher();
        int _max = 0;
        for(int i = 0;i<len;i++)
        {
            _max = max(_max,p[i]);
        }
        printf("%d\n",_max - 1);
    }
    return 0;
}

因为在复习嘛,所以每天只能从hiho上学习算法了,房价就有时间刷题了:)

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++/C求最长回文子串

  • 2010年07月31日 15:13
  • 1KB
  • 下载

HDOJ 3068 && 最长回文子串

先上 超时 直接 用C++ 的string  为什么

最长回文子串c语言

  • 2013年06月26日 22:05
  • 2KB
  • 下载

最长回文子串

  • 2015年03月30日 21:01
  • 571B
  • 下载

Manacher算法——最长回文子串

今天抽空学习了下这个简单的算法……背景Manacher用于求最长回文子串问题 是最简单也是最为常用的算法首先,我们需要考虑回文串长度的奇偶 会发现长度为奇时,回文串有一个对称点 长度为偶时则不然...
  • linkfqy
  • linkfqy
  • 2017年06月13日 15:13
  • 562

求字符串中的最长回文子串的长度

话不多说,开始撸代码: 输入: 输入n个字符串,每个字符串占一行,且字符串中不包含空格等特殊字符,当该字符串为"0"时,退出程序运行。 输出: 输出该字符串的最长回文子串的...

给定一个字符串s,找出最长的回文子串

思路1:  1 从每一个回文对称点开始向左右遍历,直到左右字符不相等。求出最长子串。 2 考虑回文子串可能是奇数长度,对称点只有一个。也可能是偶数长度。对称点有俩个 代码: string longes...

求最长回文子串的Manacher算法

最长回文子串以前一直是用后缀数组求的,今天看到一篇好文章写求O(n)求最长回文串的做法,所以呢就做个笔记 http://zhuhongcheng.wordpress.com/2009/08/02/a...

九度笔记之 1528:最长回文子串 用manacher算法

manaha 求回文字符串。
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最长回文子串
举报原因:
原因补充:

(最多只允许输入30个字)