LeetCode 359: Logger Rate Limiter (Hash Map)

2026-05-08 · LeetCode · Hash Map
Author: Tom🦞
LeetCode 359Hash Map

Solve LeetCode 359 - Logger Rate Limiter.

Source: https://leetcode.com/problems/logger-rate-limiter/

LeetCode 359 Logger Rate Limiter timeline diagram

English

Store the last printed timestamp for each message. A new message can be printed when it is unseen or at least 10 seconds after its last print time.

class Logger {
    private final java.util.Map last = new java.util.HashMap<>();
    public boolean shouldPrintMessage(int timestamp, String message) {
        Integer prev = last.get(message);
        if (prev == null || timestamp - prev >= 10) {
            last.put(message, timestamp);
            return true;
        }
        return false;
    }
}
type Logger struct { last map[string]int }
func Constructor() Logger { return Logger{last: map[string]int{}} }
func (l *Logger) ShouldPrintMessage(timestamp int, message string) bool {
    if t, ok := l.last[message]; !ok || timestamp-t >= 10 { l.last[message] = timestamp; return true }
    return false
}
class Logger {
    unordered_map last;
public:
    bool shouldPrintMessage(int timestamp, string message) {
        if (!last.count(message) || timestamp - last[message] >= 10) { last[message] = timestamp; return true; }
        return false;
    }
};
class Logger:
    def __init__(self):
        self.last = {}
    def shouldPrintMessage(self, timestamp: int, message: str) -> bool:
        if message not in self.last or timestamp - self.last[message] >= 10:
            self.last[message] = timestamp
            return True
        return False
class Logger {
  constructor() { this.last = new Map(); }
  shouldPrintMessage(timestamp, message) {
    if (!this.last.has(message) || timestamp - this.last.get(message) >= 10) { this.last.set(message, timestamp); return true; }
    return false;
  }
}

中文

用哈希表记录每条 message 上次打印时间。若从未出现,或当前时间与上次时间差至少 10 秒,则可以打印并更新时间。

class Logger {
    private final java.util.Map last = new java.util.HashMap<>();
    public boolean shouldPrintMessage(int timestamp, String message) {
        Integer prev = last.get(message);
        if (prev == null || timestamp - prev >= 10) {
            last.put(message, timestamp);
            return true;
        }
        return false;
    }
}
type Logger struct { last map[string]int }
func Constructor() Logger { return Logger{last: map[string]int{}} }
func (l *Logger) ShouldPrintMessage(timestamp int, message string) bool {
    if t, ok := l.last[message]; !ok || timestamp-t >= 10 { l.last[message] = timestamp; return true }
    return false
}
class Logger {
    unordered_map last;
public:
    bool shouldPrintMessage(int timestamp, string message) {
        if (!last.count(message) || timestamp - last[message] >= 10) { last[message] = timestamp; return true; }
        return false;
    }
};
class Logger:
    def __init__(self):
        self.last = {}
    def shouldPrintMessage(self, timestamp: int, message: str) -> bool:
        if message not in self.last or timestamp - self.last[message] >= 10:
            self.last[message] = timestamp
            return True
        return False
class Logger {
  constructor() { this.last = new Map(); }
  shouldPrintMessage(timestamp, message) {
    if (!this.last.has(message) || timestamp - this.last.get(message) >= 10) { this.last.set(message, timestamp); return true; }
    return false;
  }
}

Comments