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; } } }