题目描述
给定一个字符串(假设字符串中只包含英文大小写字母),排序输出出现次数最多的三个字符,如果有两个字符出现次数相等,输出字母序列靠前的(提示这里指的是字母在ASCII码表中的顺序),如果不足三个,把现有的输出。例如:对于字符串mddfreee,输出:(e,3)(d,2)(f,1)。输入aab,输出 (a,2)(b1),注意后台测试数据的字符串可能会非常长。
输入
第一行为一个整数N,代表有几组输入。接下来N行分别代表待统计的字符串。
输出
对于给定的每次输入,输出结果。每个实例占一行格式如下。
示例输入
4 abcde assssddfffrt baabbbaaaaa aB
示例输出
(a,1)(b,1)(c,1) (s,4)(f,3)(d,2) (a,7)(b,4) (B,1)(a,1)
- #include <iostream>
- #include <algorithm>
- #include <cstring>
- #include <cstdio>
- using namespace std;
- int main()
- {
- char s[100000];
- int s1[100000];
- int a[100000];
- char t;
- int n,m,j,k,i,L,l;
- cin>>n;
- for(L=1;L<=n;L++)
- {
- int p,coun=1;
- p=0;
- cin>>s;
- int len=strlen(s);
- for(j=0;j<len-1;j++)
- {
- for(k=j+1;k<len;k++)
- {
- if(s[j]>s[k])
- {
- t=s[j];
- s[j]=s[k];
- s[k]=t;
- }
- }
- }
- for(j=0;j<len;j++)
- {
- if(s[j]==s[j+1])
- {
- coun++;
- }
- else
- {
- a[p]=coun;
- s1[p]=s[j];
- p++;
- coun=1;
- }
- }
- for(i=0;i<p-1;i++)
- {
- for(j=i+1;j<p;j++)
- {
- if(a[i]<a[j])
- {
- l=a[i];a[i]=a[j];a[j]=l;
- l=s1[i];s1[i]=s1[j];s1[j]=l;
- }
- }
- }
- if(p>2)
- {
- for(i=0;i<3;i++)
- {
- printf("(%c,%d)",s1[i],a[i]);
- }
- }
- else
- {
- for(i=0;i<p;i++)
- printf("(%c,%d)",s1[i],a[i]);
- }
- cout<<endl;
- }
- return 0;
- }