题目链接:点击查看

题目大意:给出一个字符串s,现在可以对字符串进行一次操作,具体规则是可以将字符串的一个前缀在不改变顺序的情况下变为其后缀,问如何操作可以使得最长回文子串的长度尽可能长,题目要求输出最长的长度

题目分析:本来看完题目以为是需要一点思维的题目,但看完数据范围后感觉可以直接莽一发,试了一下还真就A了,真就是个模板题呗。。

马拉车的时间复杂度是O(n),枚举每一种子串的时间复杂度是O(n),总共时间复杂度为n*n,不知道用string类会怎样,因为一开始就怕超时,直接用的char字符串和memcpy

然后后续发现了比较简单的实现方法,可以直接把原串复制一遍拼接起来,直接跑马拉车就是答案了,注意如果最后答案大于原字符串长度的话需要特判一下

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cstring>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e4+100;char s[N*2];//预处理之后的字符串char str[N],ss[N];//原本的字符串int p[N*2];//最长回文半径int Manacher()
{int k=0;s[k++]='!';for(int i=0;str[i];i++){s[k++]='#';s[k++]=str[i];}s[k++]='#';s[k]=0;int ans=0;p[0]=1;int id=0,mmax=0;for(int i=1;i<k;i++){if(i<mmax)p[i]=min(mmax-i,p[2*id-i]);elsep[i]=1;while(s[i-p[i]]==s[i+p[i]])p[i]++;if(i+p[i]>mmax){mmax=i+p[i];id=i;}ans=max(ans,p[i]-1);}return ans;
} int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);scanf("%s",str);int n=strlen(str);memcpy(str+n,str,n);printf("%d\n",min(Manacher(),n));return 0;
}

牛客 - 小A的回文串(Manacher模板题)相关推荐

  1. 牛客每日练习----合并回文串,年轮广场,安卓图案解锁

    大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤. 链接:https://ac.nowcoder.com/acm/problem/1323 ...

  2. bzoj 2565: 最长双回文串 manacher算法

    2565: 最长双回文串 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem. ...

  3. [国家集训队]最长双回文串 manacher

    ---题面--- 题解: 首先有一个直观的想法,如果我们可以求出对于位置i的最长后缀回文串和最长前缀回文串,那么我们枚举分界点然后合并前缀和后缀不就可以得到答案了么? 所以我们的目标就是求出这两个数列 ...

  4. Leetcode 125. 验证回文串 (每日一题 20210816)

    给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写.说明:本题中,我们将空字符串定义为有效的回文串.示例 1:输入: "A man, a plan, a cana ...

  5. 洛谷P4555 [国家集训队]最长双回文串(manacher 线段树)

    题意 题目链接 Sol 我的做法比较naive..首先manacher预处理出以每个位置为中心的回文串的长度.然后枚举一个中间位置,现在要考虑的就是能覆盖到i - 1的回文串中 中心最靠左的,和能覆盖 ...

  6. 【CodeForces - 798A】Mike and palindrome (回文串,水题,字符串问题)

    题干: Mike has a string s consisting of only lowercase English letters. He wants to change exactly one ...

  7. BZOJ 2565 最长双回文串 Manacher

    题目大意: 定义双回文串G是指一个可以被拆分成两个部分(S和T)的字符串G = S + T, 且S和T都是回文串的串, G自己本身可以不是回文串 给出一个长度为n ( 2 <= n <= ...

  8. 【BZOJ2565】最长双回文串 Manacher

    题解: 首先我们写一个Manacher模板.. 然后我们可以把所有回文串的信息映射到左端点上, 每个点依此维护最长右连接回文串. 然后再顺着扫一遍就出解了. 代码: #include <cstd ...

  9. bzoj4755: [Jsoi2016]扭动的回文串 manacher+二分+Hash

    bzoj4755: [Jsoi2016]扭动的回文串 Description JYY有两个长度均为N的字符串A和B. 一个"扭动字符串S(i,j,k)由A中的第i个字符到第j个字符组成的子串 ...

最新文章

  1. JAVA核心技术I---JAVA基础知识(查漏补缺private,static)
  2. 有没有好用的目标管理、项目管理和绩效管理工具?
  3. 如何快速阅读一篇英文文献
  4. erlang节点互相ping,一个能ping通,另外一个不行。
  5. 去除tableview中每个cell的分段线
  6. python 对axis的理解
  7. 开源ETL软件在智能化集成系统中的应用
  8. webbench接口并发测试
  9. AcWing 828. 模拟栈
  10. 高通音频驱动调试(十七)
  11. java 线程 handler,java.lang.RuntimeException:处理程序(android.os.Handler)在死线程上向处理程序发送消息...
  12. web网页规划与设计:网站设计——简洁的旅游酒店公寓(5页) HTML+CSS+JavaScript
  13. PLSQL使用相关详细配置
  14. python实现12306车票查询
  15. 方舟服务器能不能用ce修改器,方舟生存进化CE修改器代码大全
  16. 0x00007FFEB46D3F57 (mfc140ud.dll)处(位于*.exe 中)引发的异常: 0xC0000005: 读取位置 0x00000000
  17. 95%的受访者计划在未来六个月出游,表现出对“报复性旅行”“消除接触”的渴望 | 美通社头条...
  18. Caffeine使用篇 - Eviction
  19. Qt 做个简易的计算器,加减乘除平方开根
  20. 学习c语言的方法类比,类比法在C语言程序设计教学中运用.doc

热门文章

  1. 状态码202_HTTP状态码大全
  2. 基于@Bean声明lazy-queue
  3. 委派模式与策略模式综合应用
  4. base64补等号规则说明
  5. File类概述和构造方法
  6. 类加载器的概述和分类
  7. threadpoolexecutor底层实现原理
  8. IDEA 项目结构旁边出现 0%classes,0% lines covered
  9. Servlet_3.0注解配置
  10. 私有属性和方法-子类对象不能直接访问