统计字母

10 分钟

统计一句话里每个字母各出现几次,用一个长度 26 的计数数组:把字母减去 'a' 当下标,对应位置加一。'a' 落在 cnt[0]'z' 落在 cnt[25]

string s = "banana";
int cnt[26] = {0};
for (char c : s)
    if (c >= 'a' && c <= 'z')          // 只统计小写字母
        cnt[c - 'a']++;
int best = 0;
for (int i = 1; i < 26; i++)
    if (cnt[i] > cnt[best]) best = i;
cout << char('a' + best) << " 出现 " << cnt[best] << " 次\n";

"banana" 里 a 出现 3 次最多。复杂度 是字符串长度;最后找最多的再扫一遍 26,可忽略。常见坑:一是计数数组只需开 26,别开小了;二是句子若大小写混着来,要先统一(比如全转小写)再统计,否则 'A''a' 会算成两种;三是减错基准——统计小写减 'a',统计大写减 'A',减反了下标会变负导致越界。非字母字符要先跳过。

小纸条

"banana" 里哪个字母最多?

登录 后可看答案

统计字母 · 考级冲刺 · op599 课程