華為OJ 名字美麗度
阿新 • • 發佈:2017-07-23
list tty res mod set 範圍 重載 物聯網 實例
這是一道坑爹的題目,為什麽這麽說,且看我慢慢分析……
題目例如以下:
給出一個名字,該名字有26個字符串組成,定義這個字符串的“美麗度”是其全部字母“美麗度”的總和。
每一個字母都有一個“美麗度”。範圍在1到26之間。沒有不論什麽兩個字母擁有同樣的“美麗度”。字母忽略大寫和小寫。
給出多個名字。計算每一個名字最大可能的“美麗度”。
輸入:
整數N。後面N個名字,如
2 zhangsan lisi
輸出:
每一個名字相應的最大美麗程度
如:192 101
題目分析:
這道題目乍一看,挺厲害的。可是一分析就發現這事實上就是求一個字符串中每一個字符的出現次數,為了獲得最大的美麗度那麽必須讓出現次數最多的字符美麗度為26,依次遞減往下。
有了解題思路。直接上代碼,代碼例如以下,Java實現
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 class Main {
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
int N=scanner.nextInt();
String[] names=new String[N];
Main main=new Main();
for (int i = 0; i < N; i++) {
names[i]=scanner.next();
System.out.println(main.beautyfulNames(names[i]));//為何是System.out.println()。後面解釋
}
scanner.close();
}
public int beautyfulNames(String name){
char[] c=name.toCharArray();
Map<Character, Integer> map=new HashMap<Character,Integer>();
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);
}
}
List<Map.Entry<Character, Integer>> list=new ArrayList<Map.Entry<Character,Integer>>(map.entrySet());
//Collections.sort重載方法來實現排序
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());//降序排列
// return o1.getValue().compareTo(o2.getValue());//升序排列
}
});
int result=0;
for (int i = 0; i < list.size(); i++) {
result=result+list.get(i).getValue()*(26-i);
}
return result;
}
}
看到我的這段代碼。你肯定會說這麽輸出是不正確的,由於題目給的輸出實例中明顯是都在一行……可是我告訴你這麽是對的,這就是我說這道題坑爹的原因所在。我第一提交的時候用的是System.out.print()。然後直接就提示說“格式錯誤”,不死心,我又提交第二次。依然“格式錯誤”,後來我抱著試試看的態度使用System.out.println()又一次提交,居然就對了。!
!!
——這麽大一個公司,做事情到了如此不認真的地步,我也真是醉了……
標記為原創的博文均為本人辛苦碼字所得,謝絕抄襲。轉載請註明出處,新浪微博私信艾特:物聯網project_Niegang。
華為OJ 名字美麗度