题解
字母配对
1 条题解
-
0
解题思路
先用一个
bool数组mark[26]记录哪些小写字母出现过:读到一个字母c,就把mark[c-'a']设为true。再读入一个大写字母,利用 ASCII 码的规律:大写字母的 ASCII 码比它对应的小写字母小 32,所以
大写字母 + 32就是对应的小写字母。例如:'A' 的 ASCII 码是 65,'a' 是 97,'A'+32 正好等于 'a'。
最后看看这个对应的小写字母在不在
mark里:在就输出yes,不在就输出no。参考代码
// P4481 字母配对:查找某个大写字母对应的小写字母是否出现过 #include <iostream> using namespace std; int main() { int n; // 小写字母的个数 cin >> n; bool mark[26] = {false}; // mark[i] 表示字母 'a'+i 是否出现过 for (int i = 0; i < n; i++) { char c; cin >> c; mark[c - 'a'] = true; // 把出现的小写字母记录下来 } char big; // 要查找的大写字母 cin >> big; // ASCII 码中:大写字母 + 32 = 对应的小写字母(例如 'A'+32=='a') char small = big + 32; if (mark[small - 'a']) cout << "yes" << endl; else cout << "no" << endl; return 0; }复杂度分析
读入 n 个字母并记录,查找只花常数时间,所以时间复杂度 O(n);只用一个 26 长度的数组,额外空间 O(1)。
- 1