Skip to main content
Back to problems
#1604
Medium Algorithms

Alert using same key card three or more times in a one hour period

Array Hash Table String Sorting
46.1% acceptance
Feb 25, 2026
338
440
LeetCode company workers use key-cards to unlock office doors. Each time a worker uses their key-card, the security system saves the worker's name and the time when it was used. The system emits an alert if any worker uses the key-card three or more times in a one-hour period. You are given a list of strings keyName and keyTime where [keyName[i], keyTime[i]] corresponds to a person's name and the time when their key-card was used in a single day. Access times are given in the 24-hour time format "HH:MM", such as "23:51" and "09:49". Return a list of unique worker names who received an alert for frequent keycard use. Sort the names in ascending order alphabetically. Notice that "10:00" - "11:00" is considered to be within a one-hour period, while "22:51" - "23:52" is not considered to be within a one-hour period.

Solution

Rust
Time O(n²)
Space O(n)
LeetCode
solution.rs
use std::collections::HashMap;

impl Solution {
  pub fn alert_names(key_name: Vec<String>, key_time: Vec<String>) -> Vec<String> {
    let mut map: HashMap<String, Vec<i32>> = HashMap::new();
    for (name, time) in key_name.iter().zip(key_time.iter()) {
      let parts: Vec<&str> = time.split(':').collect();
      let minutes = parts[0].parse::<i32>().unwrap() * 60 + parts[1].parse::<i32>().unwrap();
      map.entry(name.clone()).or_default().push(minutes);
    }
    let mut result: Vec<String> = Vec::new();
    for (name, mut times) in map {
      times.sort();
      for i in 2..times.len() {
        if times[i] - times[i - 2] <= 60 {
          result.push(name.clone());
          break;
        }
      }
    }
    result.sort();
    result
  }
}