2025-辽宁-复赛-第一题, 字符串数数(count)

2025-辽宁-复赛-第一题, 字符串数数(count)

CSP-XL 2025辽宁复赛真题-第一题,字符串考点,相当于GESP三级,难度⭐★☆☆☆。

CSP-XL 2025辽宁复赛真题-第一题, 字符串数数(count)

题目要求

题目描述 输入输出格式


题目分析

解题思路

  1. 题意梳理
    给定一个仅由小写字母构成的字符串,要求统计每个字母出现的次数,并按字母表顺序依次输出 26 行结果。
    共 26 行,第 1 行是 a 的个数,第 2 行是 b 的个数,其余字母均为 0。

  2. 算法选择

    • 开一个长度为 26 的整型数组 cnt,初始全 0。
    • 遍历字符串,对字符 c 执行 cnt[c-'a']++
    • 最后顺序输出 cnt[0..25],每行一个数字。
  3. 复杂度分析
    字符串长度为 nnn105n\le 10^5 量级)。

    • 时间复杂度:O(n+26)O(n + 26),线性扫描一次字符串,再输出 26 个数。
    • 空间复杂度:O(26)O(26),仅使用一个固定大小的计数数组。
  4. 边界与细节

    • 输入可能为空串,此时 26 行全为 0。
    • 输出严格按 a~z 顺序,不能遗漏、不能多行、不能带额外空格。
    • 使用 freopen 读写文件,符合复赛要求。

示例代码

#include <iostream>

int count_ary[26] = {};          // 初始化26个字母的计数数组,全部置0
int main() {
    freopen("count.in", "r", stdin);   // 重定向标准输入,从文件count.in读取数据
    freopen("count.out", "w", stdout); // 重定向标准输出,结果写入count.out
    std::string str;                   // 存储输入的字符串
    std::cin >> str;                   // 读取字符串
    // 遍历字符串,统计每个小写字母出现次数
    for (int i = 0; i < str.length(); i++) {
        count_ary[str[i] - 'a']++;     // 将字符映射到0~25,对应计数器加1
    }
    // 按字母顺序输出26个计数,每行一个
    for (int i = 0; i < 26; i++) {
        std::cout << count_ary[i] << "\n";
    }
    return 0;                          // 程序正常结束
}

附:样例和测试数据下载地址:

链接:https://pan.quark.cn/s/f8ec0cb6b88d?pwd=Xvaj 提取码:Xvaj


本文由coderli.com原创,按照CC BY-NC-SA 4.0 进行授权

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP认证交流QQ群: 688906745

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
最后更新于