3 条题解
-
1
📝 题目大意
给定一个长度为 3 的大写字母字符串 ,判断能否通过重新排列字符使其与
ABC一致。等价于判断 是否恰好包含A、B、C各一个。💡 解题思路
- 题目分析:字符串长度固定为 3,只需要判断是否同时包含
A、B、C三个字符。由于长度为 3,若三个字符都出现,则必然各出现一次,即 是ABC的一个排列。 - 算法推导:
- 用一个布尔数组(大小为 1005,索引为 ASCII 码)记录每个字符是否出现过。
- 遍历 的三个字符,将对应位置标记为
true。 - 最后检查
t['A']、t['B']、t['C']是否均为true,若是则输出Yes,否则输出No。
- 边界与细节:
- 像样例
AAC中,A出现两次但缺少B,不满足条件,输出No。 - 像样例
ARC中,虽然有A和C,但没有B,也不满足条件。 - 注意输出大小写严格区分:
Yes/No,首字母大写其余小写。
- 像样例
⏱️ 复杂度分析
- 时间复杂度:,字符串长度固定为 3,遍历和判断均为常数操作。
- 空间复杂度:,布尔数组大小固定(1005),与输入无关。
💻 标准代码 (C++)
#include <bits/stdc++.h> using namespace std; int main () { string a; bool t[1005]; // 以 ASCII 码为下标的标记数组 cin >> a; for (int i = 1; i <= 1000; i++) t[i] = false; // 初始化所有标记为 false for (int i = 0; i <= 2; i++) { t[a[i]] = true; // 标记该字符出现过 } // 检查是否 A、B、C 三个字符都出现过 if (t['A'] == true && t['B'] == true && t['C'] == true) { printf("Yes"); } else printf("No"); return 0; } - 题目分析:字符串长度固定为 3,只需要判断是否同时包含
- 1
信息
- ID
- 853
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 7
- 已通过
- 3
- 上传者