生活随笔
收集整理的這篇文章主要介紹了
华为OJ 名字美丽度
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
這是一道坑爹的題目,為什么這么說,且看我慢慢分析……
題目例如以下:
給出一個名字,該名字有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]));}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(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());
}});
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。
轉載于:https://www.cnblogs.com/jhcelue/p/7225589.html
總結
以上是生活随笔為你收集整理的华为OJ 名字美丽度的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。