L2-008 最长对称子串(manacher()算法)

一、manacher()算法

1.可以在o(n)的时间内求出一个字符串的最长回文串

假设n<=1.1*10^7

N=3e7=n*2

2.原理

manacher算法
可以在o(n)的时间内求出一个字符串的最长回文串
1.改造字符串,在字符之间和串两端插入#,
都变成奇回文串
s[0]='$'是哨兵(边界)
string str,s;
cin>>s;
len=s.size();
str+='$';
for(i=0;i<len;i++)
{str+='#';str+=s[i];
}
str+='#';
len=str.size();
cout<<manacher()<<endl;
2.回文半径d[i]:以i为中心的最长回文串的长度的一半 
# a # a # [b] # a #
1 2 3 2 1  4  1 2 1
3 1 右端点处在边缘位置 
7/2+1=4
3.加速盒子[l,r];
维护右端点最靠右的最长回文串,
利用盒子,借助之前的状态来加速计算
新的状态。盒内d[i]可以利用对称点d值
转移,盒外暴力计算完前i-1个d函数,维护盒子[l,r];
1.如果i<=r(在盒内) i的对称点 r-i+l;
if(d[r-i+l]<r-i+1)//r-i偏移量  l+偏移量=对称点 d[i]=d[i-l+1];
else(i<=r) d[i]=r-i+1;
2.如果i>r在盒外,从i开始枚举
3.求出d[i]
if(i+d[i]-1>r)l=i-d[i]+1;r=i+d[i]-1;void get_d(char *s,int n)
{d[1]=1;for(i=2,l,r=1;i<=n;i++){if(i<=r)d[i]=min(d[r-i+1],r-i+1);while(s[i-d[i]]==s[i+d[i]])d[i]++;if(i+d[i]-1>r){l=i-d[i]+1;r=i+d[i]-1;}} 
}

二、例题

对给定的字符串,本题要求你输出最长对称子串的长度。例如,给定Is PAT&TAP symmetric?,最长对称子串为s PAT&TAP s,于是你应该输出11。

输入格式:

输入在一行中给出长度不超过1000的非空字符串。

输出格式:

在一行中输出最长对称子串的长度。

输入样例:

Is PAT&TAP symmetric?

输出样例:

11

三、代码

#include<iostream>
#include<algorithm>
#include<string.h>
#include<cmath>
using namespace std;
const int N=2e7;
string str,s;
int p[N];
int n,len;
int manacher()
{p[0]=0;int L=0,R=0,sum=0,i;for(i=1;i<len;i++){if(i>R)p[i]=1;elsep[i]=min(p[2*L-i],R-i);while(str[i-p[i]]==str[i+p[i]])p[i]++;if(i+p[i]>R){L=i;R=i+p[i];sum=max(sum,p[i]);}}return sum-1;
}
int main()
{getline(cin,s);len=s.size();int k=0;//str[k++]='&';str+='&';for(int i=0;i<len;i++){
//		str[k++]='#';
//		str[k++]=s[i];str+='#';str+=s[i];}str+='#'; //str[k++]='#';len=str.size();cout<<manacher()<<endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/810807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软考 — 系统架构设计师 - 嵌入式真题

问题1&#xff1a; 可靠度表示系统在规定条件下&#xff0c;规定的时间内不发生失效的概率。 失效率表示系统运行到此时从未出现失效的情况下&#xff0c;单位时间内系统出现失效的概率 问题 2&#xff1a; 动态冗余又称为主动冗余&#xff0c;通过故障检测&#xff0c;故障定…

【话题】 0基础如何进入IT行业?

对于零基础的人来说&#xff0c;进入IT行业需要一些策略和努力。以下是一些可能的学习路径、技能培养和实践经验的获取方法&#xff1a; 方向一&#xff1a;学习路径 在线课程和教程: 利用网上资源&#xff0c;如Coursera, Udemy, Codecademy等&#xff0c;这些平台提供了许多…

SAP 计划策略82简介

前面的文章中我们已经测试了很多才策略,10、11、40、50、70、60、63 80策略。 本文将重点说明ATO模式下82策略的使用场景,计划策略82是SAP提供的另一种基于按单生产思想的计划策略,由客户的需求来直接驱动直接生产,是一个按单生产的场景。 1、首先我们先看下系统后台82策略…

centos7下配置mysql8的主从复制

mysql8的安装过程可参考:centos下安装mysql8版本_centos安装mysql8.0-CSDN博客 使用两台服务器,192.168.2.177做为主服务器,192.168.2.159做为从服务器,mysql版本都为8.0.35。 1、在主服务器177上更改/etc/my.cnf配置,添加如下内容 server_id=1 gtid_mode=ON # gtid_…

回溯算法2s总结

8.回溯算法 回溯算法理论基础 回溯法也可以叫做回溯搜索法&#xff0c;它是一种搜索的方式。回溯是递归的副产品&#xff0c;只要有递归就会有回溯。 回溯的本质是穷举&#xff0c;穷举所有可能&#xff0c;然后选出我们想要的答案 回溯法解决的问题 回溯法&#xff0c;一…

MySQL数据导出导出的三种办法(13/16)

数据导入导出 基本概述 目前常用的有3中数据导入与导出方法&#xff1a; 使用mysqldump工具&#xff1a; 优点&#xff1a; 简单易用&#xff0c;只需一条命令即可完成数据导出。可以导出表结构和数据&#xff0c;方便完整备份。支持过滤条件&#xff0c;可以选择导出部分数据…

VsCode 安装Jupyter Notebook

VsCode 安装Jupyter Notebook 安装 1、打开 VSCode 编辑器&#xff0c;点击界面左端的【扩展】栏&#xff1b; 2、在【搜索框】中输入python&#xff0c;点击第一个Python&#xff0c;检查是否已经安装 python 插件&#xff0c;没安装的点击安装&#xff1b;已安装的继续第3步…

ASUS华硕灵耀Pro14笔记本AMD锐龙版M7400QC,M7600QA原厂Win11系统工厂包下载

恢复华硕灵耀14PRO出厂开箱状态预装OEM系统Windows11工厂模式安装包&#xff0c;带Recovery恢复还原功能 适用型号&#xff1a; M7400QC、M7400QE、M7400QEB M7600QC、M7600QE、M7600QA、M7600QCB 链接&#xff1a;https://pan.baidu.com/s/1dIGRAKJQLQt_JcKbQWFxJg?pwdbn…

GD32 HID键盘矩阵键盘发送数据时,一直发送数据问题处理

这个问题找了两三天,开始并不认为是示例程序的问题,只是感觉是自己代码问题。 这个解决流程大概是: 先调好矩阵键盘=> 调用发送函数。 就是因为调用时,一直发送数据,我也在按键抬起做了操作,始终不行。 最后,发现时示例代码中有个 空闲中断 引起的。 udev->reg…

英伟达高性能芯片供货周期缩短到2-3个月,今年GPU不再紧缺?

戴尔台湾地区总经理Terence Liao近日称&#xff0c;英伟达高性能 AI GPU的交付周期在过去几个月中已从3-4个月缩短到仅2-3个月&#xff0c;进入2024年以来交货等待时间一直在不短缩短&#xff0c;目前的2-3个月已经是英伟达高性能GPU最短的交货期。 英伟达公司正在不断努力提高…

spring获取bean

参考&#xff1a;百度安全验证 这里我列举2种方法&#xff0c;其它方法可以自行学习。 1、BeanUtils代码如下&#xff1a; package com.hmblogs.backend.util;import org.springframework.context.ApplicationContext; import org.springframework.web.context.request.Requ…

义乌个体户结汇操作

很多人只知道义乌个体户是可以结汇&#xff0c;结汇还是无限额&#xff0c;但是怎么操作的很多人都不太明白&#xff0c;今天我就和各位说说义乌个体户的结汇操作流程&#xff01; 1、个体户结汇操作 国外客户/离岸公司账户-T/T汇入个体户账号》个体户账号线上结汇》结汇人民币…

深圳神秘顾客(SMS)公司助力某连锁火锅店开展神秘顾客调查

在竞争激烈的餐饮市场中&#xff0c;连锁火锅店作为热门品类之一&#xff0c;其服务质量和顾客体验成为了决定其市场地位的关键因素。某知名连锁火锅店为了持续提升顾客满意度&#xff0c;决定引入神秘顾客调查机制&#xff0c;并决定委托深圳神秘顾客&#xff08;SMS&#xff…

桶排序:原理、实现与应用场景详解

桶排序是一种基于分配策略的排序算法&#xff0c;它巧妙地利用了元素的分布特性&#xff0c;将数据分散到多个“桶”中&#xff0c;再对每个桶内部进行排序&#xff0c;最后合并所有已排序桶&#xff0c;从而实现整个数据集的排序。本文将深入探讨桶排序的原理、具体实现过程&a…

使用easyexcel读取excel并生成sql语句

1、引入pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM…

【IR-SDE】Image Restoration SDE项目演示运行app.py

背景&#xff1a; code:GitHub - Algolzw/image-restoration-sde: Image Restoration with Mean-Reverting Stochastic Differential Equations, ICML 2023. Winning solution of the NTIRE 2023 Image Shadow Removal Challenge. paper: Official PyTorch Implementations o…

如何面对微服务在部署和管理上的挑战

微服务因其灵活性和可扩展性而备受大型系统架构师的青睐&#xff0c;但是相对于一般的单体系统&#xff0c;微服务的部署和管理更具挑战性。 面对微服务架构中“部署和管理的复杂性”挑战&#xff0c;可以采取以下策略和工具来应对&#xff1a; 容器化技术&#xff1a; 使用Do…

LabVIEW闭环步进电机运动系统设计及精度分析

LabVIEW闭环步进电机运动系统设计及精度分析 在自动化设备不断发展的当代&#xff0c;闭环步进电机以其高精度和可靠性成为了自动化设备的重要组成部分。以LabVIEW软件为核心&#xff0c;结合运动控制卡及驱动器模块&#xff0c;设计并实现了一个闭环步进电机的多轴运动控制系…

Rancher1.0版本安装使用

Rancher1.0版本安装使用 准备环境 rancher是一个容器管理和服务编排工具。 如下链接&#xff0c;讲的可以&#xff0c;大家参考下&#xff0c;我已经测试过了。 http://tonybai.com/2016/04/14/an-introduction-about-rancher/ 操作系统Centos7.2 用户为root。最好使用Cent…

【iOS ARKit】USDZ文件

USDZ 概述 ARKit 支持 USDZ&#xff08;Universal Scene Description Zip&#xff0c;通用场景描述文件包&#xff09;、Reality 两种格式的模型文件&#xff0c;得益于 USDZ的强大描述能力与网络传输便利性&#xff0c;使得iOS 设备能够在其信息&#xff08;Message&#xff0…