top1编程
← 返回题目
题解

字母配对

1 条题解

  • 0
    @ 2026-8-5 1:11:26

    解题思路

    先用一个 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