标签:
题目如下:
给出一个名字,该名字有26个字符串组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个字母拥有相同的“漂亮度”。字母忽略大小写。
给出多个名字,计算每个名字最大可能的“漂亮度”。
输入:
整数N,后面N个名字,如
2 zhangsan lisi
输出:
每个名字对应的最大漂亮程度
如:192 101
分析:名字的漂亮度=26*字母个数最多的+25*字母个数其次的+24*字母个数再其次的(忽略大小写)+....+1*出现次数最小的。
要从以下几点入手:
1.统计字符的个数
2.升序排列或降序排列
3.计算漂亮度
知识点:
1.
import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public static class TestBeauty2{ public static void main(String[] args) { Scanner cin=new Scanner(System.in); int N=cin.nextInt();/*找到刚开始输入的数字,就是表示有几个字母,即有几个字符串*/ String[] names=new String[N];//构建字符串数组 TestBeauty2 tb=new TestBeauty2(); for(int i=0;i<N;i++){ names[i]=cin.next();//取出键盘输入的字符串 System.out.println(tb.beautyfulname(names[i])); } cin.close(); } public int beautyfulname(String name){ //统计字符个数 char[] c=name.toCharArray(); Map<Character,Integer> map=new HashMap<Character,Integer>();//要想使用Map接口,必须依靠子类实例化 for(int i=0;i<c.length;i++){ if(map.containsKey(c[i])){//判断集合中是否有键 map.put(c[i],map.get(c[i])+1);//向集合中增加内容 }else{ map.put(c[i],1);//没有,就把值赋1 } } //计算名字的漂亮度,先进行排序,再计算 //排序 List<Map.Entry<Character,Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet()); Collections.sort(list,new Comparator<Map.Entry<Character,Integer>>(){ public int compare(Map.Entry<Character,Integer> o1,Map.Entry<Character,Integer> o2){ return o2.getvalue().compareTo(o1.getvalue());//按自然排序,降序 } }); //计算漂亮度=26*字母数最多的+25*次多的+... int result=0; for(int i=0;i<list.size();i++){ result=result+list.get(i).getvalue()*(26-i); } return result; } }
标签:
原文地址:http://www.cnblogs.com/GumpYan/p/5816317.html