输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符
由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
#include <iostream>
#include <string>
using namespace std;
int main(){
int i;
int j = 0;
string S;
int a[26];
int b[26];
a[0] = S[0];
b[0] = 1;
int sum = 0;
cin >> S;
for (i = 1; i<S.length(); i++){
if (S[i] <= 'Z'&&S[i] >= 'A'){
S[i]+=32;
}
else{
(int)S[i];
}
for (int k = 0; k <= j; k++){
if (S[i] == a[k]){
b[k] += 1;
}
else{
j++;
a[j] = S[i];
b[j] += 1;
}
}
}
for (int k = 0; k<j; k++){
for (int c = 0; c<j - k - 1; c++){
if (b[c]>b[c + 1]){
int tmp = b[c];
b[c] = b[c + 1];
b[c + 1] = tmp;
}
}
}
for (int k = 0, c = 26; k<j; k++, c--){
sum = sum + b[k] * c;
}
printf("%d\n", sum);
system("pause");
return 0;
}