方法是申请一个长26位的数组,统计出每个字母的出现次数,然后从数组中依次弹出出现最多的次数,乘上尽可能大的权值。
#include<algorithm>
using namespace std;
int findMax(int * a){//每次弹出一个数组中的最大值。
int max=0;
int j=0;
for(int i=0;i<26;i++){
if(a[i]>=max){
max=a[i];
j=i;
}
}
a[j]=0;
return max;
}
int main(){
int n;
cin>>n;
int a[26]={0};//统计每个字母出现的次数。
string s;
int i=0;
int result=0;//存结果。
while(i<n){
cin>>s;
for(int j=0;j<s.size();j++){
a[s[j]-'a']+=1;
}
for(int k=0;k<s.size();k++){
result+=findMax(a)*(26-k);
}
cout<<result<<endl;
result=0;
i++;
}
}