约翰认为字符串的完美度等于它里面所有字母的完美度之和。每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数。
约翰不在乎字母大小写。(也就是说字母F和f)的完美度相同。给定一个字符串,输出它的最大可能的完美度。例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77。
Input
输入一个字符串S(S的长度 <= 10000),S中没有除字母外的其他字符。
Output
由你将1-26分配给不同的字母,使得字符串S的完美度最大,输出这个完美度。
Sample Input
dad
Sample Output
77
分析:就是统计出字符串出现的次数多的字符,然后分配给它最大的完美度,就是贪心吧,思路很简单,看代码吧
import java.util.*;
public class Main {
static Scanner in = new Scanner(System.in);
static int maxn = 10005;
static int[] bool = new int[30];
static int[] a = new int[30];
static int[] f = {26,25,24,23,22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1};
public static void main(String[] args) {
Arrays.fill(bool, 0);
String s = in.next().toLowerCase();
long sum = 0;
int k =0,p =0;
for(int i = 0;i < s.length();i++)
bool[s.charAt(i)-96]++;//统计每个字符出现次数
for(int i = 1;i < 27;i++) {
if(bool[i]!=0)
a[k++] = bool[i];//中间数组,用来将次数排序
}
Arrays.sort(a,0,k);
for(int i = k-1 ; i >= 0;i--)
sum += a[i]*f[p++];//贪心,次数大的分配大的因子
System.out.println(sum);
}
}
思考:注意处理方式