1. 程式人生 > 其它 >Java機試題:名字的漂亮度

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<m; i++) { String name = scanner.nextLine(); // 給名字中字母賦值範圍為1~26,要儘可能大,則重複的,就要給最大值。若兩個字母一樣多,則另一個則-1
List<Character> chars = new ArrayList<Character>(); List<En> ens = new ArrayList<En>(); 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<En>() { @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; } } }