华为OJ 初级:字符统计
2016-07-12 10:55
267 查看
描述 | 如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 清空目前的统计结果,重新统计 调用者会保证: 输入的字符串以‘\0’结尾。 |
---|---|
知识点 | 字符串,排序 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一串字符。 |
输出 | 对字符中的 各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。 |
样例输入 | aadddccddc |
样例输出 | dca |
/*字符统计: * 1、统计输入字符串中的英文字符(区分大小写)、数字和空格个数 * 2、按照统计个数由大到小输出 * 3、当个数相同时,按照ASII码由小到大输出 * * 下面的解题思路是: * 1、先用map表收集数据,字符作为key,字符的个数作为value * 2、由于map没有compare()方法,将map转换为list集合,使用集合中的compare()方法 * 3、重写compare()方法,按照value值的大小排序,当value值相同时,根据key的值排序 * 4、输出key值 */ 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); String input = scanner.nextLine(); count(input); scanner.close(); } private static void count(String input) { Map<Character, Integer> hashMap = new HashMap<>(); for (int i = 0; i < input.length(); i++) {//遍历字符串,当为英文字母、数字和空格时收集 if ((input.charAt(i) >= 'a' && input.charAt(i) <= 'z') || (input.charAt(i) >= 'A' && input.charAt(i) <= 'Z') || input.charAt(i) == ' ' || (input.charAt(i) >= '0' && input.charAt(i) <= '9')) { if (hashMap.containsKey(input.charAt(i))) {//如果之前已经有该字符,则将其对应的value值+1 int temp = hashMap.get(input.charAt(i)); temp++; hashMap.put(input.charAt(i), temp); } else { hashMap.put(input.charAt(i), 1);//如果之前没有收集该字符,则收集,并将value置1 } } } List<Map.Entry<Character, Integer>> list = new ArrayList<Map.Entry<Character, Integer>>( hashMap.entrySet());//将map转换为list集合 Collections.sort(list,new valuesSort());//将list排序 for(int i = 0; i < list.size(); i++){ //遍历list,输出key值 System.out.print(list.get(i).getKey()); } } } class valuesSort implements Comparator<Map.Entry<Character, Integer>> { @Override public int compare(Map.Entry<Character, Integer> o1, //重写compare方法 Map.Entry<Character, Integer> o2) { // TODO Auto-generated method stub if ((o2.getValue() - o1.getValue()) > 0) return 1; else if ((o2.getValue() - o1.getValue()) == 0 && o2.getKey() - o1.getKey() < 0) return 1; else return -1; } }
相关文章推荐
- 2016夏季练习——dp
- Mac上安装WireShark,然后用它来探测视频直播类应用的Url
- C#加载C、C++动态库的方法
- STL序列式容器之优先队列——priority_queue
- java 接口转码、加密
- 关于STM32L100xx, STM32L151xx, STM32L152xx ,STM32L162xx 的Power Control
- poj 2442 优先队列/堆+dp
- HashMap和HashSet的区别
- Centos系统下修改环境变量PATH路径的方法
- mysql排序
- android 清理缓存
- 客户端接入SDK
- Medical image registration(section5)
- tomcat JSP连接数据库问题
- C语言入门(十)数组
- poj3659树状DP
- SQL Server 编程入门经典(3)之T-SQL基本语句
- IOS基础之UILineBreakModeWordWrap
- Error:不能将"char*"类型的值分配到"LPSTR"类型的实体 也许 "char*"类型的实参与"LPCWSTR"类型的形参不兼容
- 【服务器学习】SPRING MVC学习