class Solution {
public:
string largestWordCount(vector<string>& messages, vector<string>& senders) {
}
};
2284. 最多单词数的发件人
给你一个聊天记录,共包含 n
条信息。给你两个字符串数组 messages
和 senders
,其中 messages[i]
是 senders[i]
发出的一条 信息 。
一条 信息 是若干用单个空格连接的 单词 ,信息开头和结尾不会有多余空格。发件人的 单词计数 是这个发件人总共发出的 单词数 。注意,一个发件人可能会发出多于一条信息。
请你返回发出单词数 最多 的发件人名字。如果有多个发件人发出最多单词数,请你返回 字典序 最大的名字。
注意:
"Alice"
和 "alice"
是不同的名字。
示例 1:
输入:messages = ["Hello userTwooo","Hi userThree","Wonderful day Alice","Nice day userThree"], senders = ["Alice","userTwo","userThree","Alice"] 输出:"Alice" 解释:Alice 总共发出了 2 + 3 = 5 个单词。 userTwo 发出了 2 个单词。 userThree 发出了 3 个单词。 由于 Alice 发出单词数最多,所以我们返回 "Alice" 。
示例 2:
输入:messages = ["How is leetcode for everyone","Leetcode is useful for practice"], senders = ["Bob","Charlie"] 输出:"Charlie" 解释:Bob 总共发出了 5 个单词。 Charlie 总共发出了 5 个单词。 由于最多单词数打平,返回字典序最大的名字,也就是 Charlie 。
提示:
n == messages.length == senders.length
1 <= n <= 104
1 <= messages[i].length <= 100
1 <= senders[i].length <= 10
messages[i]
包含大写字母、小写字母和 ' '
。messages[i]
中所有单词都由 单个空格 隔开。messages[i]
不包含前导和后缀空格。senders[i]
只包含大写英文字母和小写英文字母。原站题解
javascript 解法, 执行用时: 148 ms, 内存消耗: 61.1 MB, 提交时间: 2022-12-06 13:10:25
/** * @param {string[]} messages * @param {string[]} senders * @return {string} */ var largestWordCount = function(messages, senders) { // 比赛中使用长的变量名,不太便于书写,因此转换一下 let map = new Map(), m = messages, s = senders,n = s.length; // 使用map集合记录 for(let i = 0; i < n; i++) { // 合并 const num = m[i].split(' ').length; map.set(s[i], (map.get(s[i]) || 0) + num); } // 统计得到每个人所说的单词数,通过循环遍历,判断谁说的单词最多 let max = -Infinity, maxx = ''; map.forEach((value, key) => { if(value > max) { max = value; maxx = key; }else if(value == max) { // 当两个人说的单词一样多的时候,返回字典序大的 let ans = [key,maxx]; // sort()函数,默认就是字典序升序排序,不需要额外操作。 ans.sort(); maxx = ans[1]; } }); return maxx; };
golang 解法, 执行用时: 52 ms, 内存消耗: 9.5 MB, 提交时间: 2022-12-06 13:09:02
func largestWordCount(messages, senders []string) (ans string) { cnt := map[string]int{} for i, msg := range messages { cnt[senders[i]] += strings.Count(msg, " ") + 1 } for s, c := range cnt { if c > cnt[ans] || c == cnt[ans] && s > ans { ans = s } } return }
python3 解法, 执行用时: 100 ms, 内存消耗: 19.3 MB, 提交时间: 2022-12-06 13:08:16
class Solution: def largestWordCount(self, messages: List[str], senders: List[str]) -> str: mp = defaultdict(int) for sender, message in zip(senders, messages): mp[sender] += len(message.split(' ')) most_word = max(mp.values()) most_senders = [sender for sender, cnt in mp.items() if cnt == most_word] most_senders.sort() return most_senders[-1]