最长回文子串

原创 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上学习算法了,房价就有时间刷题了:)

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

【最长回文子串】Manache算法,O(N)时间复杂度

找一个字符串里的最长回文子串。 暴力法:定中心,从0长度向两端扩展的方法O(n^2), n >= 10^5还是超时,故只能《O(n^2) Manacher's 算法:定中心,从p[r],(已能确定...
  • zhong123123123
  • zhong123123123
  • 2016年05月06日 11:15
  • 920

动态规划算法求最长回文子串

给出了动态规划方法求最长回文子串的程序及分析。
  • shineboyxxb
  • shineboyxxb
  • 2016年07月31日 16:38
  • 2645

51nod oj 1088 1089 最长回文子串 【Manacher算法】

传送门:1088 传送门:1089 1088题的数据是1000可以直接用普通的方法-.- 1089题的数据是10000-.-用Manacher算法 我现在是通过看这位大神的博客...
  • leibniz_zhang
  • leibniz_zhang
  • 2016年08月10日 00:07
  • 419

最长回文子串(动态规划和递归)

给一个字符串,找出它的最长的回文子序列的长度。例如,如果给定的序列是“BBABCBCAB”,则输出应该是7,“BABCBAB”是在它的最长回文子序列。 “BBBBB”和“BBCBB”也都是该字符串的回...
  • weijinqian0
  • weijinqian0
  • 2016年04月04日 10:24
  • 2843

hihocoder 1032 最长回文子串 (Manacher算法 详解+模板)

hihocoder 1032 最长回文子串 (Manacher算法 详解+模板)
  • Tc_To_Top
  • Tc_To_Top
  • 2016年03月08日 21:11
  • 647

hihocoder 1032 最长回文子串(Manachar算法)

#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述    小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴...
  • disparity_CJK
  • disparity_CJK
  • 2016年09月10日 10:56
  • 705

C语言最长回文子串

最长回文子串 Time Limit: 3000ms, Memory Limit: 10000KB , Accepted: 3053, Total Submissions: 4193 Descripti...
  • geshengtong
  • geshengtong
  • 2017年10月28日 11:10
  • 231

hihoCoder#1032_最长回文子串

求最长回文子串的算法比较经典的是manacher算法,下面写写自己的理解。 (文中用到的图片来自这里,博主写的很好,由于为了图片和代码一致,我稍微p了一下图片。) 首先,说明一下用到的数组和其他参...
  • sinat_30071459
  • sinat_30071459
  • 2016年04月02日 19:37
  • 1561

最长公共子串、最长公共子序列、最长回文子串、最长回文子序列、回文子串个数

1、最长公共子串 首先看最长公共子串的解答(暴力算法、动态规划、) 从优化到再优化,最长公共子串 2、最长公共子序列(LCS)  解析:动态规划解最长公共子序列问题 3、 leetcode ...
  • m0_37693059
  • m0_37693059
  • 2017年08月04日 16:39
  • 163

九度题目1528:最长回文子串

题目1528:最长回文子串 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:781 解决:239 题目描述: 回文串就是一个正读和反读都一样的字符串,比如“level”或...
  • u013517797
  • u013517797
  • 2014年04月27日 15:54
  • 917
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最长回文子串
举报原因:
原因补充:

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