1089 最长回文子串 V2(Manacher算法)

14人阅读 评论(0) 收藏 举报
分类:

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。
输入一个字符串Str,输出Str里最长回文子串的长度。
Input
输入Str(Str的长度 <= 100000)
Output
输出最长回文子串的长度L。
Input示例
daabaac
Output示例
5

思路:Manacher(马拉车算法)https://blog.csdn.net/sunny_hun/article/details/79977680

#include<iostream>
#include<cstring>
using namespace std;

char str[100100];
char s[200200];

int main()
{
	cin>>str;
    int i,j,maxx=1;
    int n=strlen(str);
    for(i=n;i>=1;i--)
    {
        s[i*2+1]='#';
        s[i*2]=str[i-1];
    }
    s[0]='$';
    s[1]='#';
    n=strlen(s);
    s[n]='\0';
    int mx;//最大回文子串的最右边位置
    int id;//最大回文子串的中心位置
    int p[200200];  //以i为中心的最大回文子串半径
    for(int i=1;i<n;i++)
    {
        if(i<mx)
            p[i]=min(p[2*id-i],mx-i);  //i的半径在mx左/右,p[j],mx-i
        else
            p[i]=1;
        while(s[i-p[i]]==s[i+p[i]])
            p[i]++;
        if(i+p[i]>mx)  //最大回文子串中心变成i
        {
            id=i;
            mx=i+p[i];
        }
        maxx=max(maxx,p[i]-1);
    }
    cout<<maxx<<endl;
	return 0;
}

查看评论

51nod 1089 最长回文子串 V2 (Manacher算法)

回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。 输入一个字符串Str,输出Str里最长回文子串的长度。 Input 输入Str(Str的长度 ...
  • h1021456873
  • h1021456873
  • 2015-10-30 10:11:40
  • 780

51nod1089 最长回文子串 V2(Manacher算法)

链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 题意:中文题。 分析:Manacher算法练习题。 代...
  • Fsss_7
  • Fsss_7
  • 2016-07-16 15:35:36
  • 463

51nod 1089 最长回文子串 V2(Manacher算法)

#include using namespace std; const int MAXN=200100; char a[MAXN],s[MAXN]; int f[MAXN],n,ans; voi...
  • xin_jun
  • xin_jun
  • 2016-11-06 15:23:52
  • 224

【51nod】1089 最长回文子串 V2(Manacher算法)

1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 ...
  • ctsas
  • ctsas
  • 2016-12-10 22:02:50
  • 433

51Nod 1089 最长回文子串 V2(Manacher算法)

回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。 输入一个字符串Str,输出Str里最长回文子串的长度。 Input 输入Str(Str的长度 Output...
  • gtuif
  • gtuif
  • 2017-06-29 23:38:27
  • 186

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

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

51nod-【1089 最长回文子串 V2(Manacher算法)】

1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 ...
  • Cai_Nia
  • Cai_Nia
  • 2016-10-31 21:51:16
  • 334

求最长回文子串_Manacher算法_Java实现

通过对大神C代码的分析学习,结合自身理解,留下自己的Java实现过程。 原文: http://blog.csdn.net/xingyeyongheng/article/details/9310555...
  • qq_26668499
  • qq_26668499
  • 2016-05-25 09:32:39
  • 1285

最长回文子串—动态规划和Manacher算法(0(n)时间复杂度

#include #include #include using namespace std; /** * Manacher O(n) * @param string str */ int...
  • zhidao_wenge
  • zhidao_wenge
  • 2017-03-04 18:33:14
  • 878

Manacher 算法详解:O(n) 复杂度求最长回文子串

先预处理下:在每个字符的两边都插入一个特殊的符号,比如abba变成#a#b#b#a#,aba变成 #a#b#a#(因为Manacher算法只能处理奇数长度的字符串)。同时,为了避免数组越界,在字符串开...
  • synapse7
  • synapse7
  • 2014-02-03 12:27:09
  • 2233
    个人资料
    持之以恒
    等级:
    访问量: 6702
    积分: 1103
    排名: 4万+
    最新评论