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

0
回文串划分 V2

640
回文串划分

40
回文字符串

10
  1. //O(n) manacher算法
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. using namespace std;
  6. const int N=1e6+;
  7. int l,len,p[N<<];
  8. char s[N],S[N<<];
  9. void manacher(){
  10. int ans=,id=,mx=-;
  11. for(int i=;i<l;i++){
  12. if(id+mx>i) p[i]=min(p[id*-i],id+mx-i);
  13. while(i-p[i]->=&&i+p[i]+<=l&&S[i-p[i]-]==S[i+p[i]+]) p[i]++;
  14. if(id+mx<i+p[i]) id=i,mx=p[i];
  15. ans=max(ans,p[i]);
  16. }
  17. printf("%d\n",ans);
  18. }
  19. int main(){
  20. scanf("%s",s);len=strlen(s);
  21. l=-;
  22. for(int i=;i<len;i++) S[++l]='#',S[++l]=s[i];
  23. S[++l]='#';
  24. manacher();
  25. return ;
  26. }
  1. //O(nlogn) 字符串哈希
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<iostream>
  5. using namespace std;
  6. typedef int i64;
  7. const int N=1e6+;
  8. int n,m,ans,a[N];char s[N];
  9. i64 P,pow[N],hash_l[N],hash_r[N];
  10. void get_hash(){
  11. pow[]=;
  12. for(int i=;i<=m;i++) pow[i]=pow[i-]*P;
  13. for(int i=;i<=m;i++) hash_r[i]=hash_r[i-]*P+a[i];
  14. for(int i=m;i>=;i--) hash_l[i]=hash_l[i+]*P+a[i];
  15.  
  16. }
  17. int main(){
  18. P=;
  19. scanf("%s",s+);
  20. n=strlen(s+);
  21. for(int i=;i<=n;i++){
  22. a[++m]='#';
  23. a[++m]=s[i]-'A';
  24. }
  25. a[++m]='#';
  26. get_hash();
  27. int l,r,mid;
  28. for(int i=;i<=m;i++){
  29. l=;
  30. if(i-<m-i) r=i;
  31. else r=m-i+;
  32. while(r-l>){
  33. mid=l+r>>;
  34. i64 hash_to_l=hash_r[i-]-hash_r[i-mid-]*pow[mid];
  35. i64 hash_to_r=hash_l[i+]-hash_l[i+mid+]*pow[mid];
  36. if(hash_to_l==hash_to_r) l=mid;
  37. else r=mid;
  38. }
  39. ans=max(ans,l);
  40. }
  41. printf("%d",ans);
  42. return ;
  43. }

 

1089 最长回文子串 V2(Manacher算法)的更多相关文章

  1. 51Nod 1089 最长回文子串 V2 —— Manacher算法

    题目链接:https://vjudge.net/problem/51Nod-1089 1089 最长回文子串 V2(Manacher算法) 基准时间限制:1 秒 空间限制:131072 KB 分值:  ...

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

    1089 最长回文子串 V2(Manacher算法)  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 回文串是指aba.abba.cccbccc.aaa ...

  3. 51nod 1089最长回文子串V2 (manacher)

    经典题 manacher是一种很神奇的算法, 算是动态规划的一种,不过利用的信息非常有效 #include <iostream> #include <cstdio> #incl ...

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

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

  5. 51nod(1089 最长回文子串 V2)(hash 加二分)

    1089 最长回文子串 V2(Manacher算法)   回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度.   输入 ...

  6. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)

    Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法) Given a string s, find the longest pal ...

  7. 最长回文子串的Manacher算法

    对于一个比较长的字符串,O(n^2)的时间复杂度是难以接受的.Can we do better? 先来看看解法2存在的缺陷. 1) 由于回文串长度的奇偶性造成了不同性质的对称轴位置,解法2要对两种情况 ...

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

    回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串. 输入一个字符串Str,输出Str里最长回文子串的长度. 收起   输入 输入Str(Str的长度 <= 100000) ...

  9. 51nod1089(最长回文子串之manacher算法)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1089 题意:中文题诶~ 思路: 我前面做的那道回文子串的题 ...

随机推荐

  1. 【新技术】Docker 学习笔记

    原文地址 一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 --  ...

  2. C#浅析单例模式

    第一次写博客,写的不好休怪哈. 版本1:最简单的单例模式 方法一: public class MySingleton { private MySingleton() //构造函数,注意private ...

  3. Oracle常用SQL查询(2)

    三.查看数据库的SQL 1 .查看表空间的名称及大小 select  t.tablespace_name,  round ( sum (bytes / ( 1024 * 1024 )), 0 ) ts ...

  4. JavaScript异步编程(1)- ECMAScript 6的Promise对象

    JavaScript的Callback机制深入人心.而ECMAScript的世界同样充斥的各种异步操作(异步IO.setTimeout等).异步和Callback的搭载很容易就衍生"回调金字 ...

  5. How to Operate SharePoint User Alerts with PowerShell

    When you migrate list or site, the user alerts in the site will not be migrated together with the co ...

  6. Android Studio添加aar

    1.把aar复制到项目中的 libs 里面 2.在module 里面的build.gradle 的根目录添加 repositories{ flatDir { dirs 'libs' } } 3.在mo ...

  7. Android 学习心得 TextView 添加垂直滚动条

    XMl文件中: 添加android:scrollbars="vertical" 添加android:maxLines="10"  //设置一页最多显示10行 a ...

  8. python之很好的网站

    1.python官方开发者文档查询和python下载网站 2.

  9. ORACLE告警日志文件

    告警日志介绍 告警日志文件是一类特殊的跟踪文件(trace file).告警日志文件命名一般为alert_<SID>.log,其中SID为ORACLE数据库实例名称.数据库告警日志是按时间 ...

  10. sublime3 集成angularJs插件

    sublime是web开发中一款轻量级高效编辑器,十分适合前端开发(安装sublime是需要注册的,请支持正版) 1.安装sublime3(http://www.sublimetext.com/3) ...