名字的漂亮度

题目描述

给出一个名字,该名字有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 }

原文地址:https://www.cnblogs.com/crazybuddy/p/5398163.html