题目难度:一星
考察点:计数
方法:计数
1. 分析:
根据题意,我们统计26个字母每个字母出现的次数,对于字符串中的每个字符统计个数,具体的统计方法就是用一个计数数组保存个数,即a[s[i]-'a']++,最后再输出的时候判断a[i]是否为0,如果不为0就输出对应的字母和字母统计的个数。例如:"dabcab"
定义i表示遍历的指针。
当i = 0时, a['d'-'a']++ 即a[3] = 1
当i = 1时, a['a'-'a']++ 即a[0] = 1
当i = 2时, a['b'-'a']++ 即a[1] = 1
当i = 3时, a['c'-'a']++ 即a[2] = 1
当i = 4时, a['a'-'a']++ 即a[0] = 2
当i = 5时, a['b'-'a']++ 即a[1] = 2
最终的结果为:
'a': a[0] = 2
'b': a[1] = 2
'c': a[2] = 1
'd': a[3] = 1
算法实现:
(1). 定义一个计数数组a[];
(2). 遍历字符串s,对于每个字符进行计数,即a[s[i]-'a']++;
(3). 输出结果,即当a[i]不为0时,输出对应字符和字符个数。
2. 复杂度分析:
时间复杂度:O(n)空间复杂度:O(26)
3. 代码:
#include <bits/stdc++.h> using namespace std; int a[30]; int main() { string s; cin>>s; for(int i=0; i<s.size(); i++) a[s[i]-'a']++; for(int i=0; i<26; i++) if(a[i]) cout<<char('a'+i)<<a[i]; cout<<endl; return 0; }