题目链接:https://vjudge.net/problem/HihoCoder-1032

manacher算法详解:https://blog.csdn.net/dyx404514/article/details/42061017

题目大意:

给出一段字符串,输出其中最长回文字串的长度。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
char str[maxn];//原字符串
char tmp[maxn << ];//转换后的字符串
int Len[maxn << ]; //转换原始串
int init(char *st)
{
int i, len = strlen(st);
tmp[] = '@';//字符串开头增加一个特殊字符,防止越界
for (i = ; i <= * len; i += )
{
tmp[i] = '#';
tmp[i + ] = st[i / ];
}
tmp[ * len + ] = '#';
tmp[ * len + ] = '$';//字符串结尾加一个字符,防止越界
tmp[ * len + ] = ;
return * len + ;//返回转换字符串的长度
}
//Manacher算法计算过程
int manacher(char *st, int len)
{
int mx = , ans = , po = ;//mx即为当前计算回文串最右边字符的最大值
for (int i = ; i <= len; i++)
{
if (mx>i)
Len[i] = min(mx - i, Len[ * po - i]);//在Len[j]和mx-i中取个小
else
Len[i] = ;//如果i>=mx,要从头开始匹配
while (st[i - Len[i]] == st[i + Len[i]])
Len[i]++;
if (Len[i] + i>mx)//若新计算的回文串右端点位置大于mx,要更新po和mx的值
{
mx = Len[i] + i;
po = i;
}
ans = max(ans, Len[i]);
}
return ans - ;//返回Len[i]中的最大值-1即为原串的最长回文子串额长度
} int main()
{
int t; cin >> t;
while (t--)
{
scanf("%s", &str);
int len = init(str);
int ans = manacher(tmp, len);
printf("%d\n", ans);
}
return ;
}

2018-06-04

hihocode #1032 : 最长回文子串【manacher】模板题的更多相关文章

  1. hihoCoder #1032 : 最长回文子串 [ Manacher算法--O(n)回文子串算法 ]

    传送门 #1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相 ...

  2. hihocoder #1032 : 最长回文子串 Manacher算法

    题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...

  3. HiHo 1032 最长回文子串 (Manacher算法求解)

    /** * 求解最长回文字串,Manacher算法o(n)求解最长回文子串问题 **/ #include<cstdio> #include<cstdlib> #include& ...

  4. hihoCoder hiho一下 第一周 #1032 : 最长回文子串 (Manacher)

    题意:给一个字符串,求最长回文子串的长度. 思路: (1)暴力穷举.O(n^3) -----绝对不行. 穷举所有可能的出现子串O(n^2),再判断是否回文O(n).就是O(n*n*n)了. (2)记录 ...

  5. HDU 3068 最长回文( Manacher模板题 )

    链接:传送门 思路:Manacher模板题,寻找串中的最长回文子串 /***************************************************************** ...

  6. hdu 3068 最长回文 【Manacher求最长回文子串,模板题】

    欢迎关注__Xiong的博客: http://blog.csdn.net/acmore_xiong?viewmode=list 最长回文                                 ...

  7. HDU 3068 最长回文(manacher模板题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3068 题目大意:求字符串s中最长的回文子串 解题思路:manacher模板 代码 #include&l ...

  8. hihocoder 1032 最长回文子串(Manacher)

    传送门 #include<queue> #include<cmath> #include<cstdio> #include<cstring> #incl ...

  9. 最长回文子串 —— Manacher (马拉车) 算法

    最长回文子串 回文串就是原串和反转字符串相同的字符串.比如 aba,acca.前一个是奇数长度的回文串,后一个是偶数长度的回文串. 最长回文子串就是一个字符串的所有子串中,是回文串且长度最长的子串. ...

随机推荐

  1. flash GC

    所有应用程序都要管理内存.应用程序的内存管理包括用于确定何时分配内存,分配多少内存,何时将内容放入回收站,以及何时清空回收站的准则.MMgc是 Flash Player用于几乎所有内存分配工作的通用内 ...

  2. 第16月第23天 atos

    1. grep --after-context=2 "Binary Images:" *crash xcrun atos -o zhiniao_adhoc_stg1.app.dSY ...

  3. JS堆栈与拷贝

    一.堆栈的定义 1.栈是一种特殊的线性表.其特殊性在于限定插入和删除数据元素的操作只能在线性表的一端进行. 结论:后进先出(Last In First Out),简称为LIFO线性表.栈的应用有:数制 ...

  4. jQuery - ajaxUpLoad.js

    ajaxFileUpload是一个异步上传文件的jQuery插件 语法:$.ajaxFileUpload([options]) options参数说明: 参数 作用 url 上传处理程序地址 file ...

  5. DSO 代码框架

    从数据流的角度讲一遍 DSO 代码框架. DSO 的入口是 FullSystem::addActiveFrame,输入的影像生成 FrameHessian 和 FrameShell 的 Object, ...

  6. Android勒索软件研究报告

    Android勒索软件研究报告 Author:360移动安全团队 0x00 摘要 手机勒索软件是一种通过锁住用户移动设备,使用户无法正常使用设备,并以此胁迫用户支付解锁费用的恶意软件.其表现为手机触摸 ...

  7. android okhttp的使用

    OkHttpClient client = new OkHttpClient(); String url = ""; Request request = new Request.B ...

  8. ubuntu14.04 下安装 gsl 科学计算库

    GSL(GNU Scientific Library)作为三大科学计算库之一,除了涵盖基本的线性代数,微分方程,积分,随机数,组合数,方程求根,多项式求根,排序等,还有模拟退火,快速傅里叶变换,小波, ...

  9. MySQL— pymysql and SQLAlchemy

    目录 一.pymysql 二.SQLAlchemy 一.pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 1. 下载安装 #在终端直接运行 pip ...

  10. freeRTOS中文实用教程3--中断管理之中断嵌套

    1.前言 最新的 FreeRTOS 移植中允许中断嵌套.中断嵌套需要在 FreeRTOSConfig.h 中设置configKERNEL_INTERRUPT_PRIORITY 和configMAX_S ...