Java机试题:名字的漂亮度


描述

给出一个名字,该名字有26个字符组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。

给出多个名字,计算每个名字最大可能的“漂亮度”。   本题含有多组数据。 数据范围:输入的名字长度满足 
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Main {

    // 个数
    public static int m;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        m = Integer.valueOf(scanner.nextLine());
        for (int i=0; i) {
            String name = scanner.nextLine();
            // 给名字中字母赋值范围为1~26,要尽可能大,则重复的,就要给最大值。若两个字母一样多,则另一个则-1
            List chars = new ArrayList(); 
            List ens = new ArrayList(); 
            for (int j = 0; j < name.length(); j++) {
                char enName = name.charAt(j);
                if(!chars.contains(enName)) {
                    En en = new En();
                    en.setEnName(enName);
                    en.setNums(name.replaceAll("[^"+enName+"]", "").length());
                    chars.add(enName);
                    ens.add(en);
                }
            }
            // 排序,重复最大的字母,从26开始,需要倒序
            Collections.sort(ens, new Comparator() {
                @Override
                public int compare(En o1, En o2) {
                    return o2.getNums() - o1.getNums();
                }
            });
            
            // 计算漂亮度
            int pretty = 0;
            for (int j = 0; j < name.length(); j++) {
                for (int k = 0; k < ens.size(); k++) {
                    if(ens.get(k).getEnName() == name.charAt(j)) {
                        pretty += (26 - k);
                        break;
                    }
                    
                }
            }
            System.out.println(pretty);
        }
    }

    public static class En {
        char enName; // 字符名称
        int nums;// 字符个数,用于赋值,计算出最大的漂亮度
        public char getEnName() {
            return enName;
        }
        public void setEnName(char enName) {
            this.enName = enName;
        }
        public int getNums() {
            return nums;
        }
        public void setNums(int nums) {
            this.nums = nums;
        }
    }
    
}