华为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]));//为何是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 名字美丽度的更多相关文章
- 华为OJ:火车进站
火车进站 给定一个正整数N代表火车数量,0<N<10,接下来输入火车入站的序列,一共N辆火车,每辆火车以数字1-9编号.要求以字典序排序输出火车出站的序列号. 输入描述: 有多组测试用例, ...
- 在华为oj的两个月
一次偶然的机会,我接触到华为oj平台(http://career-oj.huawei.com/exam/camLogin.jsp),当时的心情很是兴奋,于是立马注册开通,然后迫不及待地上去做题.刚开始 ...
- 常用OJ名字+地址(自用)
常用OJ名字+地址 不定期更新,自己用,有补充的也可以给我说说哈. 中文 openjudge 地址:openjudge.cn 说明:北大提供的一个平台,学校可申请小组: 比较好的小组: 计算概论:ic ...
- 华为OJ平台——计算字符串的相似度
题目描述: 对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下: 1 修改一个字符,如把“a”替换为“b”. 2 增加一个字符,如 ...
- 华为OJ题目:刷题
题目描述: 新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题.每天, ...
- 华为OJ平台——字符串分隔
题目描述: 连续输入字符串,请按长度为8拆分每个字符创 后输出到新的字符串数组: 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理 输入 连续输入字符串(输入两次,每个字符长长度小于100)输 ...
- 华为OJ平台——输出最小的k个数
输入n个整数,输出其中最小的k个. 详细描述: 接口说明 原型: bool GetMinK(unsignedint uiInputNum, int *pInputArray, unsignedint ...
- 华为oj 购物单
这两天断断续续敲完这个(放假的时候比较懒),一次成功有点小激动(●'◡'●) 不过貌似从第一次打开开始计时..... 这道题目很像01背包,我将附件与它们的主件绑定(就是link起来)然后套用动态规 ...
- 华为oj 刷题记录之合唱团
华为OJ-合唱队 描述 计算最少出列多少位同学,使得剩下的同学排成合唱队形 说明: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队 ...
随机推荐
- [Err] 1022 - Can't write; duplicate key in table '#sql-1500_26'
今天用powerdesigner修改了一些外键关系,有两个外键的名字取一样的,忘记改了.然后在用navicat运行sql文件时,报出[Err] 1022 - Can't write; dupl ...
- 设计模式(二 & 三)工厂模式:概述
工厂 从 coding 的角度来说,在需要创建对象的时候,直接在方法内部使用 new 关键字来创建,是非常方便的. 然而从全局的角度考虑,这样会使对象变得难以管理和控制,代码会变得非常脆弱,缺乏弹性. ...
- iOS学习笔记34-加速计和陀螺仪
一.CoreMotion框架介绍 我们知道有一些iOS的应用,会有一些特殊的要求,比如: 电子罗盘指南针之类的应用:让我们知道方向. 运动类型软件:让我们知道我们跑步多少公里. 社交软件中的摇一摇功能 ...
- ideaaaaaaaaa
数据库proxy:可以用作自动化数据逆向SQL test4j/jtester:
- 【前端学习笔记】2015-09-02~~~~ 关于filter()匹配的使用
关于filter的使用先记录以下几点: 1.filter(':even')遍历所有元素,找到index为偶数的元素.. ps: filter(':odd') odd----奇数 eve ...
- 关于pymongo的一些说明
问题 一: 在pymongo中使用find是得到1个游标对象的,如果你想实现MongoDB shell中find操作,例如: > db.test.find() { "_id" ...
- C#实现键盘钩子
前言: 因为项目中需要使用到快捷键,所以上网找资料了解关于快捷键的实现技术,于是有了键盘钩子的使用学习.在网上了解到,键盘钩子其实只是很多种钩子中的其中一种.所谓钩子:请看下面关于钩子的描述(来自百度 ...
- CMake安装或CMake Error at CMakeLists
CMake安装或CMake Error at CMakeLists 发生情景: 使用cmake命令安装软件时,报如下错误: CMake Error at CMakeLists.txt:4 (CMAKE ...
- zoj 2760(网络流+floyed)
How Many Shortest Path Time Limit: 10 Seconds Memory Limit: 32768 KB Given a weighted directed ...
- LeetCode OJ--Add Two Numbers
http://oj.leetcode.com/problems/add-two-numbers/ 将用链表表示的两个数相加,(2 -> 4 -> 3) + (5 -> 6 -> ...