字符串学习笔记
时间:2021-07-12
本文章向大家介绍字符串学习笔记,主要包括字符串学习笔记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. manacher 马拉车
思路
- 回文串长度有奇有偶,奇回文串有对称中心,那偶回文串呢,所以我们就在每两个字符串之间加一个#,再在整个串前面加一个 % ,这样奇偶串就可以用按一种方法处理了,比如abcd --> %a#b#c#d#
- 我们可以用O(n) 求出r数组,r[i]是以i为对称中心的回文串半径(长度包括i),令mx是回文串覆盖的最右边界的右边一位,p是覆盖最右边界的回文串的对称中心,这时我们要求r[i],暴力会TLE,当p<mx时,我们考虑r[i]可以从r[2 * p - i] 处已确认对称的部分转移过来,r[i]=min (mx-p,r[ 2 * p - i ]),之后继续尝试暴力向外拓展,看r[i]是否能增大
code
#include<bits/stdc++.h>
#define N 22000010
#define mod 998244353
#define int long long
using namespace std;
int n,ans;
int r[N];
char a[N];
template<class T> inline void read(T &x)
{
x=0;int g=1;char s=getchar();
for (;s<'0'||s>'9';s=getchar()) if (s=='-') g=-1;
for (;s>='0'&&s<='9';s=getchar()) x=(x<<1)+(x<<3)+(s^48);
x*=g;
}
signed main()
{
int i,j,op,x,y,z;
scanf("%s",a+1);
n=strlen(a+1);
for (i=n;i;i--) a[2*i]=a[i],a[2*i+1]='#';a[1]='#';a[0]='$';
int p=1,mx=1;
n=2*n+1;
for (i=1;i<=n;i++)
{
if (mx<=i) r[i]=1;
else r[i]=min(mx-i,r[2*p-i]);
while(a[i+r[i]]==a[i-r[i]]) r[i]++;
if (i+r[i]>mx)
{
mx=i+r[i];p=i;
}
ans=max(ans,r[i]);
}
printf("%lld\n",ans-1);
return 0;
}
原文地址:https://www.cnblogs.com/Ritalc/p/15003831.html
- 深入了解浏览器的重绘与重排
- 自己动手写区块链(Java版)
- 自己动手写区块链-发起一笔交易(Java版)
- 详解JavaScript跨域问题
- OpenStack Magnum及Liberty新功能简介
- JDK10要来了:下一代 Java 有哪些新特性?
- 是时候忘掉finalize方法了
- 学会一个JVM插件:使用HSDIS反汇编JIT生成的代码
- ONOS 实战分享(一):项目建立、调试到热部署
- 自己动手系列-延迟队列
- OVS中Action源码分析&自定义Action
- 读懂一行Full GC日志(回复JVM内存分配担保机制一文中 Mr/Mrs Xxx 在留言区提出的问题)
- 总结了一些指针易出错的常见问题(四)
- 当你在浏览器中输入Google.com并且按下回车之后发生了什么?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——报警模块说明
- three.js 制作一个三维的推箱子游戏
- IP摄像头RTSP协议网页无插件直播视频平台EasyNVR如何在直播或录像中添加定制化音频?
- three.js之初探骨骼动画
- three.js 自制骨骼动画(一)
- vue 人脸识别 demo
- 最完整的Explain总结,妈妈再也不担心我的SQL优化了
- three.js 自制骨骼动画(二)
- 记一次keepalived和VIP导致的故障
- three.js 着色器材质之初识着色器
- Python爬虫获取豆瓣电影并写入excel
- 教你用Python自动发送和收取邮件的方法
- Python爬虫 爬取糗事百科段子实例分享
- 用Python做一个游戏辅助脚本,完整编程思路分享!
- python获取百度热榜链接的实例方法