3433: Count Mentions Per User
Problem Statement
You are given an integer numberOfUsers
representing the total number of users and an array events
of size n x 3
.
Each events[i]
can be either of the following two types:
- Message Event:
["MESSAGE", "timestampi", "mentions_stringi"]
<ul>
<li>This event indicates that a set of users was mentioned in a message at <code>timestamp<sub>i</sub></code>.</li>
<li>The <code>mentions_string<sub>i</sub></code> string can contain one of the following tokens:
<ul>
<li><code>id<number></code>: where <code><number></code> is an integer in range <code>[0,numberOfUsers - 1]</code>. There can be <strong>multiple</strong> ids separated by a single whitespace and may contain duplicates. This can mention even the offline users.</li>
<li><code>ALL</code>: mentions <strong>all</strong> users.</li>
<li><code>HERE</code>: mentions all <strong>online</strong> users.</li>
</ul>
</li>
</ul>
</li>
<li><strong>Offline Event:</strong> <code>["OFFLINE", "timestamp<sub>i</sub>", "id<sub>i</sub>"]</code>
<ul>
<li>This event indicates that the user <code>id<sub>i</sub></code> had become offline at <code>timestamp<sub>i</sub></code> for <strong>60 time units</strong>. The user will automatically be online again at time <code>timestamp<sub>i</sub> + 60</code>.</li>
</ul>
</li>
Return an array mentions
where mentions[i]
represents the number of mentions the user with id i
has across all MESSAGE
events.
All users are initially online, and if a user goes offline or comes back online, their status change is processed before handling any message event that occurs at the same timestamp.
Note that a user can be mentioned multiple times in a single message event, and each mention should be counted separately.
Example 1:
Input: numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","71","HERE"]]
Output: [2,2]
Explanation:
Initially, all users are online.
At timestamp 10, id1
and id0
are mentioned. mentions = [1,1]
At timestamp 11, id0
goes offline.
At timestamp 71, id0
comes back online and "HERE"
is mentioned. mentions = [2,2]
Example 2:
Input: numberOfUsers = 2, events = [["MESSAGE","10","id1 id0"],["OFFLINE","11","0"],["MESSAGE","12","ALL"]]
Output: [2,2]
Explanation:
Initially, all users are online.
At timestamp 10, id1
and id0
are mentioned. mentions = [1,1]
At timestamp 11, id0
goes offline.
At timestamp 12, "ALL"
is mentioned. This includes offline users, so both id0
and id1
are mentioned. mentions = [2,2]
Example 3:
Input: numberOfUsers = 2, events = [["OFFLINE","10","0"],["MESSAGE","12","HERE"]]
Output: [0,1]
Explanation:
Initially, all users are online.
At timestamp 10, id0
goes offline.
At timestamp 12, "HERE"
is mentioned. Because id0
is still offline, they will not be mentioned. mentions = [0,1]
Constraints:
1 <= numberOfUsers <= 100
1 <= events.length <= 100
events[i].length == 3
events[i][0]
will be one ofMESSAGE
orOFFLINE
.1 <= int(events[i][1]) <= 105
- The number of
id<number>
mentions in any"MESSAGE"
event is between1
and100
. 0 <= <number> <= numberOfUsers - 1
- It is guaranteed that the user id referenced in the
OFFLINE
event is online at the time the event occurs.
Code Solution