1 条题解

  • 0
    @ 2025-10-16 16:59:46

    解法思路

    核心思想

    枚举所有可能的子串 [I,J][I,J],检查其中 B、S、C 三种字符的数量是否满足互不相等。

    算法步骤

    1. 前缀和预处理:计算B、S、C 三种字符的前缀和数组

      • sum[1][i] 表示前 ii 个字符中 B 的数量
      • sum[2][i] 表示前 ii 个字符中C 的数量
      • sum[3][i] 表示前 ii 个字符中 S 的数量
    2. 双重循环枚举

      • 外层循环枚举字符类型(1到3)
      • 内层循环枚举子串的右端点 jj
      • 对于每个子串 [i,j][i, j],计算三种字符的数量: [ s_1 = \text{sum}[1][j] - \text{sum}[1][i-1] ] [ s_2 = \text{sum}[2][j] - \text{sum}[2][i-1] ] [ s_3 = \text{sum}[3][j] - \text{sum}[3][i-1] ]
    3. 条件检查:满足以下任一条件即可更新答案:

      • 三种字符数量互不相等:s1s2s_1 \neq s_2s2s3s_2 \neq s_3s1s3s_1 \neq s_3
      • 只有两种字符出现,但数量不相等(第三种字符数量为0)
    4. 特殊处理:额外检查靠近末尾的几个子串,确保不遗漏最优解

    复杂度分析

    • 时间复杂度:O(n2)O(n^2),适用于 n2500n \leq 2500 的数据范围
    • 空间复杂度:O(n)O(n)
    • 1

    信息

    ID
    3204
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者