题目描述
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。输入描述:
整数N,后续N个名字
输出描述:
每个名称可能的最大漂亮程度
输入例子:
2zhangsanlisi
输出例子:
192101 思路:其实就是求每个字符串中字符出现的个数,然后根据个数多少进行排序,分别乘以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 Listli = new ArrayList ();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 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 mp = new HashMap ();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 > li = new ArrayList >();56 Set > se = mp.entrySet();57 Iterator > it = se.iterator();58 while (it.hasNext()) { // 把Map.Entry 类型元素存入list中,以便排序59 Entry en = it.next();60 li.add(en);61 // System.out.println(en);62 }63 Collections.sort(li, new Comparator >() {64 65 @Override66 public int compare(Entry o1,67 Entry o2) {68 // TODO Auto-generated method stub69 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 }