携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情
刷题的日常
一天一题,保持脑子清爽
最多单词数的发件人
来自leetcode的 2284 题,题意如下:
给你一个聊天记录,共包含 n条信息。给你两个字符串数组messages 和senders,其中messages[i]是senders[i]发出的一条信息。
一条 信息是若干用单个空格连接的 单词,信息开头和结尾不会有多余空格。发件人的 单词计数是这个发件人总共发出的 单词数。注意,一个发件人可能会发出多于一条信息。
请你返回发出单词数 最多的发件人名字。如果有多个发件人发出最多单词数,请你返回 字典序最大的名字。
注意:
- 字典序里,大写字母小于小写字母。
- "Alice" 和"alice"是不同的名字。
理解题意
我们可以从题意中提取的条件如下:
- 题目会给定两个数组
- 一个是发件人数组
- 一个是发件信息
- 要统计每个发件人发送的信息的单词数量
- 要返回发送单词数最多的发件人
- 如果单词数量相同,则返回字典序最大的一个
做题思路
需要注意的是,相同的单词可以被统计多次,所以我们直接根据空格切分出单词就可以了。
- 遍历所有的消息,用Map存储发件人发送的单词数量
- 通过对空格进行统计,我们可以知道一个消息中的单词为
空格数 + 1 - 在遍历的过程中统计结果,遇到最大的进行保存,如果最大值相同,则保留字典序最大的一个数
- 返回结果
代码实现
代码实现如下:
public class Solution {
public String largestWordCount(String[] messages, String[] senders) {
Map<String, Integer> map = new HashMap<>();
int tmp, max = 0;
String result = null, sender;
for (int i = 0; i < messages.length; i++) {
sender = senders[i];
tmp = map.computeIfAbsent(sender, (k) -> 0);
map.put(sender, tmp += countWord(messages[i]));
if (max < tmp) {
max = tmp;
result = sender;
continue;
}
if (max > tmp) {
continue;
}
if (sender.compareTo(result) <= 0) {
continue;
}
max = tmp;
result = sender;
}
return result;
}
private int countWord(String message) {
int result = 0;
for (int i = 0; i < message.length(); i++) {
if (message.charAt(i) == ' ') {
result++;
}
}
return result + 1;
}
}