1 条题解
-
0
解法思路
核心思想
枚举所有可能的子串 ,检查其中 B、S、C 三种字符的数量是否满足互不相等。
算法步骤
-
前缀和预处理:计算B、S、C 三种字符的前缀和数组
- sum[1][i] 表示前 个字符中 B 的数量
- sum[2][i] 表示前 个字符中C 的数量
- sum[3][i] 表示前 个字符中 S 的数量
-
双重循环枚举:
- 外层循环枚举字符类型(1到3)
- 内层循环枚举子串的右端点
- 对于每个子串 ,计算三种字符的数量: [ 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] ]
-
条件检查:满足以下任一条件即可更新答案:
- 三种字符数量互不相等: 且 且
- 只有两种字符出现,但数量不相等(第三种字符数量为0)
-
特殊处理:额外检查靠近末尾的几个子串,确保不遗漏最优解
复杂度分析
- 时间复杂度:,适用于 的数据范围
- 空间复杂度:
-
- 1
信息
- ID
- 3204
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者