151. Design Logger Message Printer
Design Logger Message Printer
Design a logger system that processes a stream of messages along with their timestamps.
Each unique message can be printed at most once within any 10 second window. That means if a message is printed at timestamp t, the same message cannot be printed again before timestamp t + 10.
All incoming messages are provided in chronological order. It is also possible for multiple messages to share the same timestamp.
Class
MessageLogger
Methods
MessageLogger()
- Initializes the logger system.
boolean canPrintMessage(int timestamp, String message)
- Returns
true if the given message is allowed to be printed at timestamp.
- Returns
false if the same message was printed in the last 10 seconds.
- If a message is printed at timestamp
t, then the next valid timestamp for that message becomes t + 10.
Rules
- Messages are evaluated in non-decreasing order of
timestamp.
- Multiple messages may arrive at the same
timestamp.
- The decision for a message depends only on its own previous printed timestamps.
Constraints
0 ≤ timestamp ≤ 10^9
1 ≤ message.length ≤ 30
- Timestamps are always provided in non-decreasing order.
- At most
10^4 calls are made to canPrintMessage.
Examples
Example 1
MessageLogger logger = new MessageLogger(); logger.canPrintMessage(timestamp = 1, message = "foo") returns
true
- The message
"foo" has not been printed before.
- The next valid timestamp for
"foo" becomes 11.
logger.canPrintMessage(timestamp = 2, message = "bar") returns
true
- The message
"bar" is new.
- The next valid timestamp for
"bar" becomes 12.
logger.canPrintMessage(timestamp = 3, message = "foo") returns
false
3 < 11, so "foo" is still restricted.
logger.canPrintMessage(timestamp = 8, message = "bar") returns
false
8 < 12, so "bar" cannot be printed yet.
logger.canPrintMessage(timestamp = 10, message = "foo") returns
false
10 < 11, so "foo" is still blocked.
logger.canPrintMessage(timestamp = 11, message = "foo") returns
true
11 ≥ 11, so "foo" can be printed again.
- The next valid timestamp becomes
21.
Example 2
MessageLogger logger = new MessageLogger(); logger.canPrintMessage(timestamp = 5, message = "alpha") returns
true
- First occurrence of
"alpha".
logger.canPrintMessage(timestamp = 5, message = "beta") returns
true
- Different message, evaluated independently.
logger.canPrintMessage(timestamp = 14, message = "alpha") returns
false
- The next valid timestamp for
"alpha" is 15.
logger.canPrintMessage(timestamp = 15, message = "alpha") returns
true
15 meets the required delay.