您的位置:首页 > 其它

华为OJ-名字的漂亮度

2016-04-07 15:35 190 查看
今天刷的华为OJ上的题目:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。给出多个名字,计算每个名字最大可能的“漂亮度”。
输入:

整数N,后续N个名字

N个字符串,每个表示一个名字
输出

每个名称可能的最大漂亮程度

样例输入2 zhangsan lisi

样例输出192 101


这道题目重点是对每个字符串进行处理,我采用了hashmap将字符串中的字符存储起来,然后对hashmap进行排序,这个排序方法借鉴了别人的一个比较巧妙的方法,利用了匿名类,接口,泛型等知识点,值得记录下来。
<pre name="code" class="java">import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;

public class Main {
public static void main(String[] args){
Scanner scan= new Scanner(System.in);
int amount=scan.nextInt();
String[] first=new String[amount];
int[] result=new int[amount];
for(int i=0;i<amount;i++){
first[i]=scan.next();
result[i]=getNum(first[i]);
}
for(int i=0;i<result.length;i++){
System.out.printf("%d ",result[i]);}
}
public static int getNum(String s){
int result=0;
int num=26;
char[] a=s.toCharArray();
int oldNum=0;
HashMap<Character, Integer> map = new HashMap<Character, Integer>();
for (char c : a) {
if (map.containsKey(c)) {
oldNum=map.get(c);
map.put(c, oldNum+1);
}else {
map.put(c, 1);
}
}
List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>((Collection<? extends Entry<String, Integer>>) map.entrySet());
Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o2.getValue()).toString().compareTo(o1.getValue().toString());
}
});
for(int i=0;i<infoIds.size();i++)
{
result=result+num*(infoIds.get(i).getValue());
num--;
}
return result;
}
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: