华为机试题 HJ102 字符统计
题目链接:
思路: 使用TreeMap,统计字符出现次数 统计完成后,创建List存储map的value,即出现次数,再对List从大到小排序 此时遍历List,对于每个List元素i,遍历TreeMap的value, 第一个匹配的key即为出现次数为i,同时ASCII码最小的字符,输出它, 再将其在map中删除,否则会影响后续相同出现次数为i的字符 改进思路:将list改为TreeSet,这样后面遍历的时候map就不用remove元素了代码如下:
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String s = br.readLine(); TreeMap<Character, Integer> map = new TreeMap<>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); map.put(ch, map.getOrDefault(ch, 0) + 1); } List<Integer> list = new ArrayList<>(map.values()); // 改进思路:将list改为TreeSet,这样后面遍历的时候map就不用remove元素了 list.sort((o1, o2) -> o2 - o1); // 从大到小排序 for (int i : list) { for (char ch : map.keySet()) { int count = map.get(ch); if (count == i) { System.out.print(ch); map.remove(ch); break; } } } } }
#华为机试##笔试刷题#