OJ-------字符统计**(自带比较)
2016-08-11 20:33
218 查看
描述 | 如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。 实现以下接口: 输入一个字符串,对字符中的各个英文字符,数字,空格进行统计(可反复调用) 按照统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASII码由小到大排序输出 清空目前的统计结果,重新统计 调用者会保证: 输入的字符串以‘\0’结尾。 |
---|---|
知识点 | 字符串,排序 |
运行时间限制 | 10M |
内存限制 | 128 |
输入 | 输入一串字符。 |
输出 | 对字符中的 各个英文字符(大小写分开统计),数字,空格进行统计,并按照统计个数由多到少输出,如果统计的个数相同,则按照ASII码由小到大排序输出 。如果有其他字符,则对这些字符不用进行统计。 |
样例输入 | aadddccddc |
样例输出 | dca |
import java.util.*; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); 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 题目1021:统计字符 【ZJU2007考研机试题2】
- 华为OJ——统计不同的字符的种类
- 九度OJ 1021 统计字符 (模拟)
- 【华为OJ】统计字符个数
- 华为oj之字符个数统计
- 【华为OJ40】输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- [华为OJ--C++]010-字符个数统计
- 【华为OJ】【053-字符统计】
- 九度 OJ 1021:统计字符
- 华为OJ——字符个数统计
- 【华为OJ】输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数
- 第九周OJ作业——统计不同种类字符数
- 第九周-OJ-A统计字符个数
- 第九周OJ项目-统计出其中英文字母、数字、空格和其他字符的个数
- 华为OJ题目(三):字符统计
- 华为OJ训练之0003-161228-统计字符
- oj网站的训练题:统计字符
- OJ刷题之统计出其中英文字母,数字,空格和其他字符的个数
- 华为OJ-字符统计
- [华为OJ--C++]032-输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数