diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md new file mode 100644 index 000000000..f199f5628 --- /dev/null +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/README.md @@ -0,0 +1,44 @@ +# [1415.The k-th Lexicographical String of All Happy Strings of Length n][title] + +## Description +A **happy string** is a string that: + +- consists only of letters of the set `['a', 'b', 'c']`. +- `s[i] != s[i + 1]` for all values of `i` from `1` to `s.length - 1` (string is 1-indexed). + +For example, strings **"abc"**, **"ac"**, **"b"** and "abcbabcbcb" are all happy strings and strings **"aa"**, **"baa"** and **"ababbc"** are not happy strings. + +Given two integers `n` and `k`, consider a list of all happy strings of length `n` sorted in lexicographical order. + +Return the kth string of this list or return an **empty string** if there are less than k happy strings of length n. + +**Example 1:** + +``` +Input: n = 1, k = 3 +Output: "c" +Explanation: The list ["a", "b", "c"] contains all happy strings of length 1. The third string is "c". +``` + +**Example 2:** + +``` +Input: n = 1, k = 4 +Output: "" +Explanation: There are only 3 happy strings of length 1. +``` + +**Example 3:** + +``` +Input: n = 3, k = 9 +Output: "cab" +Explanation: There are 12 different happy string of length 3 ["aba", "abc", "aca", "acb", "bab", "bac", "bca", "bcb", "cab", "cac", "cba", "cbc"]. You will find the 9th string = "cab" +``` + +## 结语 + +如果你同我一样热爱数据结构、算法、LeetCode,可以关注我 GitHub 上的 LeetCode 题解:[awesome-golang-algorithm][me] + +[title]: https://leetcode.com/problems/the-k-th-lexicographical-string-of-all-happy-strings-of-length-n +[me]: https://github.com/kylesliu/awesome-golang-algorithm diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go index d115ccf5e..60ba96afc 100755 --- a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution.go @@ -1,5 +1,33 @@ package Solution -func Solution(x bool) bool { - return x +var canUse = []byte{'a', 'b', 'c'} + +func Solution(n int, k int) string { + bs := make([]byte, n) + var dfs func([]byte, byte, int) + cnt := 0 + dfs = func(cur []byte, pre byte, index int) { + if cnt > k { + return + } + if index == n { + cnt++ + if cnt == k { + copy(bs, cur) + } + return + } + for _, b := range canUse { + if b != pre { + cur[index] = b + dfs(cur, b, index+1) + } + } + } + arr := make([]byte, n) + dfs(arr, byte(' '), 0) + if cnt < k { + return "" + } + return string(bs) } diff --git a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go index 14ff50eb4..c2986bbef 100755 --- a/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go +++ b/leetcode/1401-1500/1415.The-k-th-Lexicographical-String-of-All-Happy-Strings-of-Length-n/Solution_test.go @@ -10,30 +10,30 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + n, k int + expect string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", 1, 3, "c"}, + {"TestCase2", 1, 4, ""}, + {"TestCase3", 3, 9, "cab"}, } // 开始测试 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.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.n, c.k) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }