From 7cc6c2b5591207b9d9c797f8e2e82000e5163582 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 20 Apr 2025 17:02:55 +0800 Subject: [PATCH] Add solution and test-cases for problem 1797 --- .../1797.Design-Authentication-Manager/1.png | Bin 0 -> 26083 bytes .../README.md | 42 ++++++++----- .../Solution.go | 58 +++++++++++++++++- .../Solution_test.go | 27 +++++--- 4 files changed, 99 insertions(+), 28 deletions(-) create mode 100644 leetcode/1701-1800/1797.Design-Authentication-Manager/1.png diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/1.png b/leetcode/1701-1800/1797.Design-Authentication-Manager/1.png new file mode 100644 index 0000000000000000000000000000000000000000..864ba1394db3ad8108fc4f9e9937e107a0d5ae09 GIT binary patch literal 26083 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 SpnGDi)cC}i<0UYM$o~g)2A(tk literal 0 HcmV?d00001 diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md index 6da0de40a..69c5294fe 100755 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/README.md @@ -1,28 +1,38 @@ # [1797.Design Authentication Manager][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is an authentication system that works with authentication tokens. For each session, the user will receive a new authentication token that will expire `timeToLive` seconds after the `currentTime`. If the token is renewed, the expiry time will be **extended** to expire `timeToLive` seconds after the (potentially different) `currentTime`. -**Example 1:** +Implement the `AuthenticationManager` class: -``` -Input: a = "11", b = "1" -Output: "100" -``` +- `AuthenticationManager(int timeToLive)` constructs the `AuthenticationManager` and sets the `timeToLive`. +- `generate(string tokenId, int currentTime)` generates a new token with the given `tokenId` at the given `currentTime` in seconds. +- `renew(string tokenId, int currentTime)` renews the **unexpired** token with the given `tokenId` at the given `currentTime` in seconds. If there are no unexpired tokens with the given `tokenId`, the request is ignored, and nothing happens. +- `countUnexpiredTokens(int currentTime)` returns the number of **unexpired** tokens at the given currentTime. -## 题意 -> ... +Note that if a token expires at time `t`, and another action happens on time t (`renew` or `countUnexpiredTokens`), the expiration takes place **before** the other actions. -## 题解 +**Example 1:** -### 思路1 -> ... -Design Authentication Manager -```go -``` +![1](./1.png) +``` +Input +["AuthenticationManager", "renew", "generate", "countUnexpiredTokens", "generate", "renew", "renew", "countUnexpiredTokens"] +[[5], ["aaa", 1], ["aaa", 2], [6], ["bbb", 7], ["aaa", 8], ["bbb", 10], [15]] +Output +[null, null, null, 1, null, null, null, 0] + +Explanation +AuthenticationManager authenticationManager = new AuthenticationManager(5); // Constructs the AuthenticationManager with timeToLive = 5 seconds. +authenticationManager.renew("aaa", 1); // No token exists with tokenId "aaa" at time 1, so nothing happens. +authenticationManager.generate("aaa", 2); // Generates a new token with tokenId "aaa" at time 2. +authenticationManager.countUnexpiredTokens(6); // The token with tokenId "aaa" is the only unexpired one at time 6, so return 1. +authenticationManager.generate("bbb", 7); // Generates a new token with tokenId "bbb" at time 7. +authenticationManager.renew("aaa", 8); // The token with tokenId "aaa" expired at time 7, and 8 >= 7, so at time 8 the renew request is ignored, and nothing happens. +authenticationManager.renew("bbb", 10); // The token with tokenId "bbb" is unexpired at time 10, so the renew request is fulfilled and now the token will expire at time 15. +authenticationManager.countUnexpiredTokens(15); // The token with tokenId "bbb" expires at time 15, and the token with tokenId "aaa" expired at time 7, so currently no token is unexpired, so return 0. +``` ## 结语 diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go index d115ccf5e..c6e4a42e9 100644 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution.go @@ -1,5 +1,59 @@ package Solution -func Solution(x bool) bool { - return x +type AuthenticationManager struct { + live int64 + token map[string]int64 +} + +func Constructor(timeToLive int) AuthenticationManager { + return AuthenticationManager{live: int64(timeToLive), token: make(map[string]int64)} +} + +func (this *AuthenticationManager) Generate(tokenId string, currentTime int) { + this.token[tokenId] = int64(currentTime) + this.live +} + +func (this *AuthenticationManager) Renew(tokenId string, currentTime int) { + expired, ok := this.token[tokenId] + if !ok { + return + } + ic := int64(currentTime) + if expired > ic { + this.token[tokenId] = ic + this.live + } +} + +func (this *AuthenticationManager) CountUnexpiredTokens(currentTime int) int { + ans := 0 + ic := int64(currentTime) + for _, c := range this.token { + if c > ic { + ans++ + } + } + return ans +} + +type input struct { + op byte + token string + v int +} + +func Solution(n int, inputs []input) []int { + c := Constructor(n) + ans := make([]int, 0) + for _, op := range inputs { + if op.op == 'g' { + c.Generate(op.token, op.v) + continue + } + if op.op == 'r' { + c.Renew(op.token, op.v) + continue + } + ans = append(ans, c.CountUnexpiredTokens(op.v)) + } + return ans } diff --git a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go index 14ff50eb4..a4e003ec5 100644 --- a/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go +++ b/leetcode/1701-1800/1797.Design-Authentication-Manager/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n int + inputs []input + expect []int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 5, []input{ + {'r', "aaa", 1}, + {'g', "aaa", 2}, + {'c', "", 6}, + {'g', "bbb", 7}, + {'r', "aaa", 8}, + {'r', "bbb", 10}, + {'c', "", 15}, + }, []int{1, 0}}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.n, c.inputs) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.n, c.inputs) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }