package suanfa.string;
import java.util.*;
public class TopKstrings {
public static void main(String[] args) { String[] s = new String[]{"a", "b", "a"}; List<MyNode> list = topKstrings(s, 2); } public static List<MyNode> topKstrings(String[] strings, int k) { Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < strings.length; i++) { map.put(strings[i], map.getOrDefault(strings[i], 0) + 1); } PriorityQueue<MyNode> queue = new PriorityQueue<>(Comparator.comparingInt(o -> o.num)); for (Map.Entry<String, Integer> entry : map.entrySet()) { MyNode node = new MyNode(entry.getKey(), entry.getValue()); if (queue.size() < k) { queue.offer(node); } else { MyNode tmp = queue.peek(); if (tmp.num < node.num) { queue.poll(); queue.offer(node); } } } List<MyNode> list = new ArrayList<>(); while (queue.size() > 0) { list.add(queue.poll()); } return list; } static class MyNode { String val; Integer num; MyNode(String val, int num) { this.num = num; this.val = val; } }
}