D, E: Silly_Tape的字符串

容易发现,一个串 S 内的奇数长度的回文子串的数量随着长度减少单调非递减,因为对于一个长度为 K 的奇数长度回文串 P,

P[2:K-1], P[3:K-2] ... (下标从1开始) 显然也是奇数长度的回文串。

因此有一个很显然的结论: 设 L 为字符串 T 内最长奇数长度回文串的长度,带入连续奇数求和公式,则有字符串 T 的总价值为 ceil(L / 2) ^ 2

同时因为奇数长度回文子串的数量具有单调性,可以通过二分查找来确定最大的 L,接下来考虑如何检查二分查找每一步选择的中点 mid 是否可行。

对串 T 进行一遍 Manacher 算法获取 T 内以每个下标 i 为中心的最长回文串长度 D[i] 后,容易发现上面的问题实际上是查询 D 中 满足 floor(mid / 2) + 1 <= i <= D的长度 - floor(mid / 2) 且 D[i] >= mid 的 i 的数量。

对于 easy version,因为只需要存在一个长度为 L 的奇数长度回文子串就可以,我们只需要查询区间 D[i] 的最大值,使用 ST 表即可。

对于 hard version,使用可持久化线段树即可。

全部评论
floor(mid / 2) + 1 <= i <= D的长度 - floor(mid / 2)  这个约束是避免在区间查询时越界,查询到子串所不包含的字符。
点赞 回复 分享
发布于 2024-04-06 18:07 陕西
我去你好强
点赞 回复 分享
发布于 2024-04-07 00:10 香港
实在太牛
点赞 回复 分享
发布于 2024-04-07 15:33 湖北

相关推荐

lingo12:1.最好加个业务项目,大部分面试官工作以后会更偏重业务 2.实习部分描述一般般,可能hr看到会觉得你产出不够不给你过简历 3.蓝桥杯这些大部分人都有的,不如不写,反而减分项。
点赞 评论 收藏
分享
01-26 22:20
已编辑
门头沟学院 Java
Java抽象带篮子:项目很nb了,现在好好准备八股和算法吧,早点找实习,可以看看我的置顶帖子。帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务