Intuition
Remember the last time each message was printed. A message prints only if it is new or at least 10 seconds have passed since its last print.
Explanation
Track last print per message
Keep a map message -> last printed timestamp. On shouldPrintMessage(t, msg): if msg is unseen or t - last[msg] >= 10, update last[msg] = t and return true; otherwise return false.
if msg not in last or t - last[msg] >= 10:
last[msg] = t; return True
return False
Worked example
foo@1 → true, foo@3 → false (only 2s later), foo@10 → false (9s), foo@11 → true (10s since 1).
Complexity
- Time: O(1) per call.
- Space: O(distinct messages).
Implementation
import java.util.HashMap;
import java.util.Map;
class Logger {
private Map<String, Integer> last = new HashMap<>();
public Logger() {
}
public boolean shouldPrintMessage(int timestamp, String message) {
if (!last.containsKey(message) || timestamp - last.get(message) >= 10) {
last.put(message, timestamp);
return true;
}
return false;
}
}