题目链接

 /*
Name:hdu-3068-最长回文
Copyright:
Author:
Date: 2018/4/24 16:12:45
Description:
manacher算法模板
*/
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <math.h>
#include <algorithm>
using namespace std;
const int MAXN = * ;//字符串长度*2 void manacher(char str[],int len[],int n){//接口
len[] = ;
for(int i = ,j = ; i < (n<<) - ;++ i){
int p = i >> ,q = i - p, r = ((j+) >> ) + len[j] - ;
len[i] = r < q?:min(r-q+,len[(j<<) - i]);
while(p > len[i] - && q + len[i] < n && str[p - len[i]] == str[q+len[i]]) ++len[i];
if(q + len[i] - > r) j = i;
}
}
struct Solution {
string longestPalindrome(string s) {
int n = s.size();
int len[MAXN];
char *str = &s[];
manacher(str,len,n);//调用接口,得到len[]
string tmp = "";
int pos = ,max_len = ;
for(int i = ;i < (n<<) - ; ++ i){
int tmp_len = (i&)?len[i]<<:(len[i]<<)-; //以‘#’or字符为中心,串长不一样
if(tmp_len > max_len) pos = i,max_len = tmp_len; //pos记录目标串的中心点,max_len表示目标串的串长(不含#)
if(i&) tmp+="#"; else tmp+=s[i>>]; //作一个tmp[0..2n-1]的字符串,便于输出
}
if(pos&){ //找到要打印的串tmp的起始位置pos和打印长度max_len(便于打印输出)
max_len = (len[pos] << ) - ;
pos = pos - (len[pos] << ) + ;
}
else{
max_len = (len[pos] << ) - ;
pos = pos - ((len[pos]-)<<);
}
string ans = "";
for(int i = pos,j = ;j < max_len;++ j,++ i){
if(i&) continue;
ans+=tmp[i]; //tmp中找到所要打印的字符,链接起来
}
return ans;
}
}; int main()
{
// freopen("in.txt", "r", stdin);
string str;
while (cin >> str) {
getchar();
Solution tmp;
cout<<tmp.longestPalindrome(str).size()<<endl;
}
return ;
}

hdu-3068-最长回文(manacher算法模板)的更多相关文章

  1. hdu 3068 最长回文 manacher算法(视频)

    感悟: 首先我要Orz一下qsc,我在网上很难找到关于acm的教学视频,但偶然发现了这个,感觉做的很好,链接:戳戳戳 感觉这种花费自己时间去教别人的人真的很伟大. manacher算法把所有的回文都变 ...

  2. HDU 3068 最长回文 manacher 算法,基本上是O(n)复杂度

    下面有别人的比较详细的解题报告: http://wenku.baidu.com/view/3031d2d3360cba1aa811da42.html 下面贴我的代码,注释在代码中: #include ...

  3. HDU 3068 最长回文 Manacher算法

    Manacher算法是个解决Palindrome问题的O(n)算法,能够说是个超级算法了,秒杀其它一切Palindrome解决方式,包含复杂的后缀数组. 网上非常多解释,最好的解析文章当然是Leetc ...

  4. HDU - 3068 最长回文manacher马拉车算法

    # a # b # b # a # 当我们遇到回判断最长回文字符串问题的时候,若果用暴力的方法来做,就是在字符串中间添加 #,然后遍历每一个字符,找到最长的回文字符串.那么马拉车算法就是在这个基础上进 ...

  5. hdu 3068 最长回文 manacher

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度.回文就是正 ...

  6. hdu 3068 最长回文(manacher&amp;最长回文子串)

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. hdu 3068 最长回文(manacher入门)

    最长回文 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. hdu 3068 最长回文子串 马拉车模板

    前几天用后缀数组写过一次这题,毫无疑问很感人的TLE了-_-|| 今天偶然发现了马拉车模板,O(N)时间就搞定 reference:http://acm.uestc.edu.cn/bbs/read.p ...

  9. HDU - 3068 最长回文(manacher)

    HDU - 3068 最长回文 Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Subm ...

随机推荐

  1. highcharts基本介绍

    转自:http://www.cnblogs.com/jyh317/p/4189773.html 一.highcharts简介 Highcharts是一款纯javascript编写的图表库,能够很简单便 ...

  2. Hibernate学习---检索优化

    Hibernate框架对检索进行了优化,前面我们将CURD的时候提到了load和get的区别,当时仅仅说了load为延迟加载,get为立即加载,当检索的记录为空的时候load报错(不是在执行load方 ...

  3. js hash

    1)新建hash hash= {                 name  :  "image",                 "number" : &q ...

  4. iOS 结构简单清晰的 设置页面

    这个是也是看了人家的代码,觉得甚是简单清晰,也是比较容易扩展.拿来学习一下 效果展示: 重点有以下2处: 1 .建立groupModel 列清组元素:当前组list 集合, 是否有header 或者 ...

  5. Ubuntu中输入输出重定向及管道技术简述

    输出 1.标准输出 定义:程序在默认情况下输出结果的地方(stdout). 2.输出重定向 定义:用于把数据的输出转移到另一个地方去. 3.Ubuntu中例子 $ls > ~/ls_out  # ...

  6. 【Flask】Sqlalchemy 外键

    ### 外键:使用SQLAlchemy创建外键非常简单.在从表中增加一个字段,指定这个字段外键的是哪个表的哪个字段就可以了.从表中外键的字段,必须和父表的主键字段类型保持一致.示例代码如下: from ...

  7. php数组函数-array_pop()

    array_pop()函数删除数组中的最后一个元素(出栈). array_pop(array) array:必需.规定数组 返回值:返回数组的最后一个值.如果数组是空,或者不是一个数组,将返回NULL ...

  8. 重用UITableViewCell对象的概念

    重用UITableViewCell对象 UITableView控件十分常见,基本上我们随意打开一款App都能见到,它被用来列表展示数据,而其中的每一行内容都是一个cell对象 我们知道手机设备上的内存 ...

  9. Ubuntu 配置NTP Server

    Ubuntu安装NTP Server很简单,分位3步走: 第一步:安装NTP root@cephadmin:~/ceph-cluster# apt-get install ntp Reading pa ...

  10. python 操作mongoDB数据库

    网上关于python 操作mongoDB的相关文章相对不是很多,并且质量也不是很高!下面给出一个完整的 增删改查示例程序! #!/usr/bin/python # -*- coding: utf-8 ...