1 条题解

  • 0
    @ 2025-8-23 16:11:23

    回文串是指一个字符串,其正读和反读都一样。若一个回文串的长度为 n n ,那么我们只需要知道前 n2\left\lceil \frac{n}{2} \right\rceil 个位置,就可以知道整个回文串。在这里我们把这前 n2\left\lceil \frac{n}{2} \right\rceil 个位置称为 关键位

    我们要找出 字典序小于等于 s s 的回文串 数量,我们可以分成两个部分。

    1. “前缀更小”的回文串数量,也就是 字典序小于s s 的回文串数量

      可以通过遍历关键位 ii,统计第 i i 位选择比 si s_i 更小字母的对应回文串数量。设 t t 为第 i i 位选择 si s_i 更小字母的可选择数量。

      答案贡献 1:回文串长度是 奇数,也就是说第 i i 位为中心。贡献为 t t

      答案贡献 2:回文串长度是 偶数。那么我们目前可以确定的是 2i 2i 个位置,剩下的位置数量是 n2i n - 2i 个位置,这些位置可以选择填入任意字符。贡献为 t×剩余长度的回文总数 t \times 剩余长度的回文总数

    2. “前缀相同”的回文串数量。可以使用 Manacher算法(马拉车算法) 来解决,时间复杂度 O(n) O(n)

    • 1

    信息

    ID
    456
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    递交数
    48
    已通过
    2
    上传者