题目可以转换为:输入一个字符串,每个字符对应一个分值,求字符串的最大总分值;
由于题目并没有限制某个字符对应某个分值,因此可以应用贪心的思想,即将最高分值赋给出现次数最多的字符;
因此问题的解决方案为:
对字符串进行桶排序,我们只需要知道不同字符出现的次数,甚至都不需要知道次数对应的是什么字符;
然后再将次数降序排列,依次乘以当前还可以用的最高分值再加入总分值

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        while ((s = br.readLine()) != null) {
            int[] counter = new int[26];
            for(char c: s.toCharArray()) {
                counter[c-'a']++;
            }
            List<Integer> list = new ArrayList<>();
            for(int n: counter) {
                if (n > 0) {
                    list.add(n);
                }
            }
            list.sort(new Comparator<Integer>() {
                @Override
                public int compare(Integer i1, Integer i2) {
                    return i2.intValue() - i1.intValue();
                }
            });
            int point = 26, sum = 0;
            for(int i = 0; i < list.size(); i++) {
                sum += (point - i) * list.get(i).intValue();
            }
            System.out.println(sum);
        }
        br.close();
    }
}