统计字母
约 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" 里哪个字母最多?
登录 后可看答案