推荐http://blog.youkuaiyun.com/huazhizui/article/details/9698053#comments
#include <iostream>
using namespace std;
int perfect(char arr[],int n){
int per = 0;
int weight[26];//记录每个字母出现次数
for(int j=0;j<26;j++)
weight[j]=0;
for(int i=0;i<n;i++){
int index = arr[i]-'a';
if(index>25)
continue;
weight[index]++;
}
//按照出现次数进行从小到大排序
for(i=25;i>=0;i--)
for(int j=0;j<i;j++){
if(weight[j]>weight[j+1]){
int temp = weight[j];
weight[j] = weight[j+1];
weight[j+1] = temp;
}
}
//累计起来
for(i=25;i>=0;i--){
if(weight[i]==0)
break;
per += weight[i]*(i+1);
}
return per;
}
int main(){
char arr[]="dad";
cout<<perfect(arr,3)<<endl;
return 0;
}