首页 > 其他分享 >双倍回文

双倍回文

时间:2023-02-14 20:12:23浏览次数:50  
标签:int Manacher 双倍 mid ans 回文

双倍回文

#include <bits/stdc++.h>
using namespace std;
const int M=1e6+5;

char s[M];
int p[M],n=1,ans=0;

void Manacher(string t) {
    s[0]='@',s[1]='#';
    for(auto i:t)s[++n]=i,s[++n]='#';
    for(int i=1,mid=0,r=0;i<=n;i++) {
        if(i<=r)p[i]=min(p[2*mid-i],r-i);
        while(s[i-p[i]]==s[i+p[i]]) {
            p[i]++;
            if(i+p[i]-1>r&&s[i]=='#'&&(p[i]-1)%4==0) {
                if(p[i-(p[i]-1)/2]-1>=(p[i]-1)/2)ans=max(ans,p[i]-1);
            }
        }
        if(i+p[i]>r)r=i+p[i]-1,mid=i;
    }
}
//实质上是枚举了每一个出现过的回文串的
//也就是对每一个回文串都判断一下

int main() {
    int n;
    string t;
    cin>>n>>t;
    Manacher(t);
    cout<<ans<<'\n';
    return 0;
}

标签:int,Manacher,双倍,mid,ans,回文
From: https://www.cnblogs.com/basicecho/p/17120750.html

相关文章

  • lc9-回文数
    给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1:输入:x=12......
  • 回文树模板
    资料感谢:模板源于不知名ACM大神,如果有侵权,立即删除。我们定义s的一个子串t的“出 现值”为t在s中的出现次数乘以t的长度。请你求出s的所有回文子串中的最大出现值。 ......
  • 1092 回文字符串(LCSL_DP)
    1092回文字符串基准时间限制:1秒空间限制:131072KB分值:10难度:2级算法题收藏关注回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。每个字符串......
  • C语言填空:回文字符串
    #include<stdio.h>//输入一个字符串(20个字符以内),判断其是否是回文字符串(回文字符串是指正反一样的字符串)。【1】main(){chara[21];intb,【2】,len;......
  • 代码随想录算法训练营第二十六天 | 39. 组合总和,40.组合总和II,131.分割回文串
    一、参考资料组合总和题目链接/文章讲解:https://programmercarl.com/0039.%E7%BB%84%E5%90%88%E6%80%BB%E5%92%8C.html视频讲解:https://www.bilibili.com/video/BV1......
  • js 有效的回文
     需求:求出是否是「回文字符串」(正确的回文:abba、abcba),是返回true,否返回false,字符不能包含除汉字与字母之外的字符串。 思路:step1:处理边界问题,先对字符进行正......
  • P1015 [NOIP1999 普及组] 回文数
    P1015[NOIP1999普及组]回文数https://www.luogu.com.cn/problem/P1015 思路将字符串m转换为10进制的值翻转m,也转换为10进制值,后运用10进制加这两个数转换为对......
  • 【蓝桥杯基础题】2020年省赛填空题—回文日期
    一、题目背景本题为2020年省赛填空题C/C++A组第7题C/C++B组第7题JavaA组第7题二、题目描述1.问题描述2020年春节期间,有一个特殊的日期引起了大家的注意:2020......
  • 算法刷题-回文数、找出小于平均值的数、旋转图像(C/C++)
    回文数给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。示例1:......
  • #yyds干货盘点# LeetCode面试题:回文数
    1.简述:给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121是回文,而123不是。 示例1:输......