【华为OJ】【053-字符统计】
2016-05-13 06:07
344 查看
【华为OJ】【算法总篇章】
【华为OJ】【053-字符统计】
【工程下载】
题目描述
如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。 实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 清空目前的统计结果,重新统计 调用者会保证: 输入的字符串以‘\0’结尾。
输入描述
输入一串字符。
输出描述
对字符中的 各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。 如果有其他字符,则对这些字符不用进行统计。
输入例子
aadddccddc
输出例子
dca
算法实现
import java.util.*; /** * Author: 王俊超 * Date: 2015-12-27 14:41 * Declaration: All Rights Reserved !!! */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt")); while (scanner.hasNext()) { String input = scanner.nextLine(); System.out.println(count(input)); } scanner.close(); } private static String count(String s) { Set<Node> set = new TreeSet<>(new Comparator<Node>() { @Override public int compare(Node t, Node s) { if (t.v != s.v) { return s.v - t.v; } return t.c - s.c; } }); Map<Character, Node> map = new HashMap<>(s.length()); for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || c ==' ') { if (map.containsKey(c)) { map.get(c).v++; } else { map.put(c, new Node(c, 1)); } } } for (Node n : map.values()) { set.add(n); } StringBuilder builder = new StringBuilder(set.size()); for (Node n : set) { builder.append(n.c); } return builder.toString(); } private static class Node { private char c; private int v; public Node(char c, int v) { this.c = c; this.v = v; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Node node = (Node) o; return c == node.c; } @Override public int hashCode() { return (int) c; } } }
相关文章推荐
- 【华为OJ】【052-输入整型数组和排序标识,对其元素按照升序或降序进行排序】
- 标签重置 CSS Reset--学习笔记
- 【华为OJ】【051-查找组成一个偶数最接近的两个素数】
- Centos7搭建Zabbix2.4
- 成为C++高手之while循环
- 奋战到天亮
- [Javascript] Writing conventional commits with commitizen
- 十六:buffer cache作用概念
- 嵌入式经典面试题
- [Javascript] Automating Releases with semantic-release
- 了解Hypertable
- linux ftp命令mput使用
- 易經大意 101_120
- windows脚本取ip
- 几种编程语言的基本介绍
- 动态规划——漂亮打印问题
- XML系列:(3)XML解析
- OpenCV日记
- Python笔记:除、取整、取余、乘方
- Python笔记:加减乘除,格式化字符串