top1编程
← 返回题目
题解

找出没出现过的字母

1 条题解

  • 0
    @ 2026-8-5 1:04:44

    解题思路

    小写字母一共只有 a~z 这 26 个。我们准备一个长度为 26 的标记数组 used:

    读到哪个字母,就把 used[那个字母的编号] 标记成 true,表示这个字母出现过了。字母 a 对应下标 0,b 对应 1,……,z 对应 25,也就是用 c - 'a' 把字母转成下标。

    最后按字母表顺序 a、b、c……逐个检查:凡是标记还是 false 的,就是没出现过的字母,把它们依次输出。

    题目保证一定存在没出现过的字母,所以输出不会为空。

    参考代码

    // 找出没出现过的字母:用标记数组记录哪些小写字母出现过,再输出没出现过的
    #include <iostream>
    using namespace std;
    bool used[26];
    int main() {
        int n;
        cin >> n;
        for (int i = 0; i < n; i++) {
            char c;
            cin >> c;
            used[c - 'a'] = true;                         // 把出现过的字母标记上
        }
        bool first = true;
        for (int i = 0; i < 26; i++) {                    // 按a~z顺序检查
            if (!used[i]) {                               // 没出现过就输出
                if (!first) cout << ' ';
                cout << char('a' + i);
                first = false;
            }
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    读入 n 个字母需要 O(n),最后检查 26 个字母是常数时间,总时间复杂度 O(n)。标记数组固定 26 个格子,空间复杂度 O(1)。

    • 1