Top K Frequently Mentioned Keywords

 

//这里意思是如果出现在一个sentence里面只算一次
public List<String> solve(int k, String[] keywords, String[] reviews) {
   Map<String, Integer> hm = new HashMap<>();
   for (String sentence : reviews) {
      Set<String> hs = new HashSet<>();
      String[] words = sentence.split("\\W");
      for (String word : words) {
         hs.add(word.toLowerCase());
      }
      for(String word : hs){
         word = word.toLowerCase();
         hm.put(word, hm.getOrDefault(word, 0) + 1);
      }
   }
   PriorityQueue<String> pq = new PriorityQueue<>((a, b) -> hm.get(a) != hm.get(b) ? hm.get(a) - hm.get(b) : b.compareTo(a));
   for (String str : keywords) {
      str = str.toLowerCase();
      if (hm.containsKey(str)) {
         pq.offer(str);
      }//if word is not in reviews need to sort alphabetically?
      if (pq.size() > k) {
         pq.poll();
      }
   }
   List<String> res = new ArrayList<>();
   while (!pq.isEmpty()) {
      res.add(pq.poll());
   }
   Collections.reverse(res);
   return res;
}

https://leetcode.com/discuss/interview-question/542597/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值