Authentication System
Learn this problemProblem statement
Implement a session-based authentication system that manages user sessions using unique token IDs and a configurable time-to-live (time_to_live, or TTL) measured in seconds.
When a token is generated, its expiration time is current_time + time_to_live. A token may be renewed only while it is still unexpired; a successful renewal resets its expiration time to current_time + time_to_live.
Process every string in queries in the given order. The system must support these three operations:
generate <token_id> <current_time>: Atcurrent_time, create a new token with the specified ID. Its expiration time iscurrent_time + time_to_live.renew <token_id> <current_time>: Atcurrent_time, extend an existing unexpired token's expiration time tocurrent_time + time_to_live. Ignore the request if the token does not exist or has already expired.count <current_time>: Return the number of unexpired tokens atcurrent_time.
Important: Token expiration is evaluated before processing any action at the same timestamp. If a token's expiration time is exactly equal to current_time, the token is expired and cannot be renewed or counted.
Function
getUnexpiredTokens(time_to_live: int, queries: String[]) → int[]Examples
Example 1
time_to_live = 5queries = ["generate aaa 1","renew aaa 2","count 6","generate bbb 7","renew aaa 8","renew bbb 10","count 15"]return = [1,0]At time 6, token aaa is the only unexpired token, so the first count is 1. At time 15, all tokens have expired, so the second count is 0.
Example 2
time_to_live = 35queries = ["generate token1 3","count 4","generate token2 6","count 7","generate token3 11","count 41"]return = [1,2,1]- After
generate token1 3,token1expires at time38. - At
count 4, onlytoken1is unexpired, so the result is1. - After
generate token2 6,token2expires at time41. - At
count 7,token1andtoken2are unexpired, so the result is2. - After
generate token3 11,token3expires at time46. - At
count 41,token1has expired,token2expires at the same timestamp and is therefore already expired, andtoken3remains unexpired. The result is1.
Example 3
time_to_live = 9queries = ["generate token1 3","renew token1 5","generate token2 7","renew token2 8","generate token3 9","count 12"]return = [3]- After
generate token1 3,token1expires at time12. - After
renew token1 5, its expiration time becomes14. - After
generate token2 7,token2expires at time16. - After
renew token2 8, its expiration time becomes17. - After
generate token3 9,token3expires at time18. - At
count 12, all three tokens are unexpired, so the result is3.