题目描述

给你一个聊天记录,共包含 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 。

解题思路

这道题应该属于简单题,考察基本数据结构的操作。需要注意的是,当最多单词数打平,返回字典序最大的名字,注意是字典序最大,不是指的序号最大。

int countwords(string s){//计数

int ans=0;

if(s.length()==0) return ans;

for(int i=0;i

if(s[i]==' ')

ans++;

}

return ans+1;

}

string largestWordCount(vector& messages, vector& senders) {

map tmp;

vector result;

for(int i=0;i

int sum=countwords(messages[i]);

tmp[senders[i]]+=sum;

}

int m=0;

for(auto x:senders){

if(tmp[x]>=m)

m=tmp[x];

}

for(auto x:tmp){//得到最大相同的单词数的人名

if(x.second==m)

result.push_back(x.first);

}

sort(result.begin(),result.end());//排序 字典序

int ans=result.size()-1;//得到字典序最大的下标

return result[ans];

}

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: