题目描述
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
输入例子:
2 zhangsan lisi
输出例子:
192 101
思路:其实就是求每个字符串中字符出现的个数,然后根据个数多少进行排序,分别乘以26--;
1 import java.util.ArrayList; 2 import java.util.Collections; 3 import java.util.Comparator; 4 import java.util.HashMap; 5 import java.util.Iterator; 6 import java.util.List; 7 import java.util.Map; 8 import java.util.Set; 9 import java.util.Map.Entry; 10 import java.util.Scanner; 11 12 public class Test1 { 13 14 public static void main(String[] args) { 15 Scanner sc = new Scanner(System.in); 16 while (sc.hasNext()) { 17 int n = Integer.valueOf(sc.nextLine()); 18 List<String> li = new ArrayList<String>(); 19 for (int i = 0; i < n; i++) { 20 String s = sc.nextLine(); 21 String s1 = s.toUpperCase(); 22 li.add(s1); 23 } 24 25 beauty(li); 26 } 27 } 28 29 public static void beauty(List<String> li) { 30 for (int i = 0; i < li.size(); i++) { 31 countChar(li.get(i)); 32 } 33 34 } 35 36 public static void countChar(String s) { 37 Map<Character, Integer> mp = new HashMap<Character, Integer>(); 38 int count = 0; 39 for (int i = 0; i < s.length(); i++) { 40 for (int j = 0; j < s.length(); j++) { 41 if (s.charAt(i) == s.charAt(j)) { 42 count++; 43 } 44 } 45 if (!mp.containsKey(s.charAt(i))) { 46 mp.put(s.charAt(i), count); 47 count = 0; 48 } else { 50 count = 0; 51 } 52 53 } 54 55 List<Map.Entry<Character, Integer>> li = new ArrayList<Map.Entry<Character, Integer>>(); 56 Set<Entry<Character, Integer>> se = mp.entrySet(); 57 Iterator<Entry<Character, Integer>> it = se.iterator(); 58 while (it.hasNext()) {// 把Map.Entry<String, Integer>类型元素存入list中,以便排序 59 Entry<Character, Integer> en = it.next(); 60 li.add(en); 61 // System.out.println(en); 62 } 63 Collections.sort(li, new Comparator<Entry<Character, Integer>>() { 64 65 @Override 66 public int compare(Entry<Character, Integer> o1, 67 Entry<Character, Integer> o2) { 68 // TODO Auto-generated method stub 69 return o1.getValue().compareTo(o2.getValue()); 70 } 71 }); 72 // System.out.println(li); 73 int sum = 0; 74 int tem = 26; 75 for (int i = li.size() - 1; i >= 0; i--) { 76 sum += li.get(i).getValue() * (tem--); 77 } 78 System.out.println(sum); 79 } 80 81 }