最多单词数的发件人
难度:
标签:
题目描述
代码结果
运行时间: 63 ms, 内存: 21.8 MB
/* 思路:使用Java Stream处理数据,统计每个sender发送的单词数并求最大值。首先通过分割messages统计单词数,然后使用Collectors.groupingBy和Collectors.summingInt进行聚合,最后通过比较找到最大值。 */
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Solution {
public String largestWordCount(String[] messages, String[] senders) {
Map<String, Integer> wordCount = IntStream.range(0, messages.length)
.boxed()
.collect(Collectors.groupingBy(i -> senders[i], Collectors.summingInt(i -> messages[i].split(" ").length)));
return wordCount.entrySet().stream()
.max(Comparator.comparing((Map.Entry<String, Integer> entry) -> entry.getValue())
.thenComparing(Map.Entry::getKey, Comparator.reverseOrder()))
.get().getKey();
}
}
解释
方法:
首先,本题解的思路是利用一个字典来记录每个发件人发送的单词总数。遍历消息数组和发送者数组,对于每条消息,我们通过split()方法得到消息中单词的数量,并将其累加到对应发件人的计数上。完成遍历后,我们寻找字典中单词计数最大的值,然后再从字典中找出所有单词计数等于最大值的发件人。最后,返回这些发件人中字典序最大的一个。
时间复杂度:
O(n*m)
空间复杂度:
O(n)
代码细节讲解
🦆
在解决此问题时,为什么选择使用字典来跟踪每个发送者的单词计数而不是其他数据结构?
▷🦆
split()方法在处理消息时是否考虑了连续空格或特殊字符对单词计数的影响?
▷🦆
在字典中更新发件人的单词计数时,用get函数有什么优势?直接判断键是否存在然后更新会有什么潜在的问题?
▷🦆
如何确保在有多个发件人的单词数量相同时,返回的是字典序最大的名字?
▷