Welcome to Subscribe On Youtube

Formatted question description: https://leetcode.ca/all/2284.html

2284. Sender With Largest Word Count

  • Difficulty: Medium.
  • Related Topics: Array, Hash Table, String, Counting.
  • Similar Questions: Top K Frequent Elements, Top K Frequent Words.

Problem

You have a chat log of n messages. You are given two string arrays messages and senders where messages[i] is a message sent by senders[i].

A message is list of words that are separated by a single space with no leading or trailing spaces. The word count of a sender is the total number of words sent by the sender. Note that a sender may send more than one message.

Return the sender with the **largest word count. If there is more than one sender with the largest word count, return **the one with the **lexicographically largest name**.

Note:

  • Uppercase letters come before lowercase letters in lexicographical order.

  • "Alice" and "alice" are distinct.

  Example 1:

Input: messages = ["Hello userTwooo","Hi userThree","Wonderful day Alice","Nice day userThree"], senders = ["Alice","userTwo","userThree","Alice"]
Output: "Alice"
Explanation: Alice sends a total of 2 + 3 = 5 words.
userTwo sends a total of 2 words.
userThree sends a total of 3 words.
Since Alice has the largest word count, we return "Alice".

Example 2:

Input: messages = ["How is leetcode for everyone","Leetcode is useful for practice"], senders = ["Bob","Charlie"]
Output: "Charlie"
Explanation: Bob sends a total of 5 words.
Charlie sends a total of 5 words.
Since there is a tie for the largest word count, we return the sender with the lexicographically larger name, Charlie.

  Constraints:

  • n == messages.length == senders.length

  • 1 <= n <= 104

  • 1 <= messages[i].length <= 100

  • 1 <= senders[i].length <= 10

  • messages[i] consists of uppercase and lowercase English letters and ' '.

  • All the words in messages[i] are separated by a single space.

  • messages[i] does not have leading or trailing spaces.

  • senders[i] consists of uppercase and lowercase English letters only.

Solution (Java, C++, Python)

  • class Solution {
        public String largestWordCount(String[] messages, String[] senders) {
            HashMap<String, Integer> x = new HashMap<>();
            for (int i = 0; i < messages.length; i++) {
                int words = messages[i].length() - messages[i].replace(" ", "").length() + 1;
                if (x.containsKey(senders[i])) {
                    x.put(senders[i], x.get(senders[i]) + words);
                } else {
                    x.put(senders[i], words);
                }
            }
            String result = "";
            int max = 0;
            for (Map.Entry<String, Integer> entry : x.entrySet()) {
                if (entry.getValue() > max
                        || entry.getValue() == max && result.compareTo(entry.getKey()) < 0) {
                    max = entry.getValue();
                    result = entry.getKey();
                }
            }
            return result;
        }
    }
    
    ############
    
    class Solution {
        public String largestWordCount(String[] messages, String[] senders) {
            Map<String, Integer> cnt = new HashMap<>();
            int n = senders.length;
            for (int i = 0; i < n; ++i) {
                int v = 1;
                for (int j = 0; j < messages[i].length(); ++j) {
                    if (messages[i].charAt(j) == ' ') {
                        ++v;
                    }
                }
                cnt.merge(senders[i], v, Integer::sum);
            }
            String ans = senders[0];
            for (var e : cnt.entrySet()) {
                String sender = e.getKey();
                if (cnt.get(ans) < cnt.get(sender)
                    || (cnt.get(ans) == cnt.get(sender) && ans.compareTo(sender) < 0)) {
                    ans = sender;
                }
            }
            return ans;
        }
    }
    
  • class Solution:
        def largestWordCount(self, messages: List[str], senders: List[str]) -> str:
            cnt = Counter()
            for msg, sender in zip(messages, senders):
                cnt[sender] += msg.count(' ') + 1
            ans = ''
            for sender, v in cnt.items():
                if cnt[ans] < v or (cnt[ans] == v and ans < sender):
                    ans = sender
            return ans
    
    ############
    
    # 2284. Sender With Largest Word Count
    # https://leetcode.com/problems/sender-with-largest-word-count/
    
    class Solution:
        def largestWordCount(self, messages: List[str], senders: List[str]) -> str:
            mp = defaultdict(int)
            
            for message, sender in zip(messages, senders):
                mp[sender] += len(message.split())
    
            currCount = float('-inf')
            res = ""
    
            for sender, count in mp.items():
                if count > currCount:
                    currCount = count
                    res = sender
                elif count == currCount:
                    res = max(res, sender)
            
            return res
            
    
    
  • class Solution {
    public:
        string largestWordCount(vector<string>& messages, vector<string>& senders) {
            unordered_map<string, int> cnt;
            int n = senders.size();
            for (int i = 0; i < n; ++i) {
                int v = count(messages[i].begin(), messages[i].end(), ' ') + 1;
                cnt[senders[i]] += v;
            }
            string ans = senders[0];
            for (auto& [sender, v] : cnt) {
                if (cnt[ans] < v || (cnt[ans] == v && ans < sender)) {
                    ans = sender;
                }
            }
            return ans;
        }
    };
    
  • func largestWordCount(messages []string, senders []string) (ans string) {
    	cnt := map[string]int{}
    	for i, msg := range messages {
    		v := strings.Count(msg, " ") + 1
    		cnt[senders[i]] += v
    	}
    	for sender, v := range cnt {
    		if cnt[ans] < v || (cnt[ans] == v && ans < sender) {
    			ans = sender
    		}
    	}
    	return
    }
    

Explain:

nope.

Complexity:

  • Time complexity : O(n).
  • Space complexity : O(n).

All Problems

All Solutions