From d2137d41ec9bb29fe3a089cf6c817db2dcdb9620 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 27 Jun 2025 09:28:43 +0800 Subject: [PATCH] Add solution and test-cases for problem 2014 --- .../1.png | Bin 0 -> 5286 bytes .../README.md | 43 +++++++++----- .../Solution.go | 53 +++++++++++++++++- .../Solution_test.go | 21 +++---- 4 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/1.png new file mode 100644 index 0000000000000000000000000000000000000000..a68e49478a01a9cf5a2b9a9ca40d036ba6a1b98c GIT binary patch literal 5286 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 literal 0 HcmV?d00001 diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md index 8a2489525..a60e5c3ac 100755 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/README.md @@ -1,28 +1,43 @@ # [2014.Longest Subsequence Repeated k Times][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 -**Example 1:** +You are given a string `s` of length `n`, and an integer `k`. You are tasked to find the **longest subsequence repeated** `k` times in string `s`. + +A **subsequence** is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters. + +A subsequence `seq` is **repeated** `k` times in the string `s` if `seq * k` is a subsequence of `s`, where `seq * k` represents a string constructed by concatenating `seq k` times. + +- For example, `"bba"` is repeated `2` times in the string `"bababcba"`, because the string `"bbabba"`, constructed by concatenating `"bba"` `2` times, is a subsequence of the string `"bababcba"`. + +Return the **longest subsequence repeated** `k` times in string `s`. If multiple such subsequences are found, return the **lexicographicall6 largest** one. If there is no such subsequence, return an **empty** string. + +**Example 1:** + +![1](./1.png) ``` -Input: a = "11", b = "1" -Output: "100" +Input: s = "letsleetcode", k = 2 +Output: "let" +Explanation: There are two longest subsequences repeated 2 times: "let" and "ete". +"let" is the lexicographically largest one. ``` -## 题意 -> ... - -## 题解 +**Example 2:** -### 思路1 -> ... -Longest Subsequence Repeated k Times -```go +``` +Input: s = "bb", k = 2 +Output: "b" +Explanation: The longest subsequence repeated 2 times is "b". ``` +**Example 3:** + +``` +Input: s = "ab", k = 2 +Output: "" +Explanation: There is no subsequence repeated 2 times. Empty string is returned. +``` ## 结语 diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go index d115ccf5e..651c40f0c 100644 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution.go @@ -1,5 +1,54 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(s string, k int) string { + count := [26]int{} + for _, b := range s { + count[b-'a']++ + } + var greaterK []string + for i := 25; i >= 0; i-- { + if count[i] >= k { + greaterK = append(greaterK, string('a'+byte(i))) + } + } + + var match func(string) bool + match = func(pattern string) bool { + i, c := 0, 0 + for j := 0; j < len(s); j++ { + if s[j] == pattern[i] { + i++ + if i == len(pattern) { + c++ + i = 0 + if c >= k { + return true + } + } + } + } + return false + } + + loop := make([]string, len(greaterK)) + copy(loop, greaterK) + // z, y, x, 我们应该需要判断 z ok (zz) ok , zzz(ok) / 以及 zx, zy ... + var ans string + for len(loop) > 0 { + cur := loop[0] + loop = loop[1:] + if len(cur) > len(ans) { + ans = cur + } + // 开始做组合 + for _, p := range greaterK { + pattern := cur + p + if match(pattern) { + // 这个匹配后,我们需要判断是否还可以继续与其他的z,y x这种组合 + loop = append(loop, pattern) + } + } + } + + return ans } diff --git a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go index 14ff50eb4..11c3f87af 100644 --- a/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go +++ b/leetcode/2001-2100/2014.Longest-Subsequence-Repeated-k-Times/Solution_test.go @@ -10,30 +10,31 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs string + k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", "letsleetcode", 2, "let"}, + {"TestCase2", "bb", 2, "b"}, + {"TestCase3", "ab", 2, ""}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.inputs, c.k) 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.inputs, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }