mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-21 23:44:25 +08:00
Add solution 1178
This commit is contained in:
@ -68,13 +68,14 @@ There're no valid words for "gaswxyz" cause none of the words in the list cont
|
||||
## 代码
|
||||
|
||||
```go
|
||||
|
||||
package leetcode
|
||||
|
||||
/*
|
||||
匹配跟单词中的字母顺序,字母个数都无关,可以用bitmap压缩
|
||||
1. 记录word中 利用map记录各种bit标示的个数
|
||||
2. puzzles 中各个字母都不相同! 记录bitmap,然后搜索子空间中各种bit标识的个数的和
|
||||
因为puzzles长度最长是7,所以搜索空间 2^7
|
||||
匹配跟单词中的字母顺序,字母个数都无关,可以用 bitmap 压缩
|
||||
1. 记录 word 中 利用 map 记录各种 bit 标示的个数
|
||||
2. puzzles 中各个字母都不相同! 记录 bitmap,然后搜索子空间中各种 bit 标识的个数的和
|
||||
因为 puzzles 长度最长是7,所以搜索空间 2^7
|
||||
*/
|
||||
func findNumOfValidWords(words []string, puzzles []string) []int {
|
||||
wordBitStatusMap, res := make(map[uint32]int, 0), []int{}
|
||||
@ -84,7 +85,7 @@ func findNumOfValidWords(words []string, puzzles []string) []int {
|
||||
for _, p := range puzzles {
|
||||
var bitMap uint32
|
||||
var totalNum int
|
||||
bitMap |= (1 << (p[0] - 'a')) //work中要包含 p 的第一个字母 所以这个bit位上必须是1
|
||||
bitMap |= (1 << (p[0] - 'a')) //work 中要包含 p 的第一个字母 所以这个 bit 位上必须是 1
|
||||
findNum([]byte(p)[1:], bitMap, &totalNum, wordBitStatusMap)
|
||||
res = append(res, totalNum)
|
||||
}
|
||||
@ -99,20 +100,22 @@ func toBitMap(word []byte) uint32 {
|
||||
return res
|
||||
}
|
||||
|
||||
//利用dfs 搜索 puzzles的子空间
|
||||
//利用 dfs 搜索 puzzles 的子空间
|
||||
func findNum(puzzles []byte, bitMap uint32, totalNum *int, m map[uint32]int) {
|
||||
if len(puzzles) == 0 {
|
||||
*totalNum = *totalNum + m[bitMap]
|
||||
return
|
||||
}
|
||||
//不包含puzzles[0],即puzzles[0]对应bit是0
|
||||
//不包含 puzzles[0],即 puzzles[0] 对应 bit 是 0
|
||||
findNum(puzzles[1:], bitMap, totalNum, m)
|
||||
//包含puzzles[0],即puzzles[0]对应bit是1
|
||||
//包含 puzzles[0],即 puzzles[0] 对应 bit 是 1
|
||||
bitMap |= (1 << (puzzles[0] - 'a'))
|
||||
findNum(puzzles[1:], bitMap, totalNum, m)
|
||||
bitMap ^= (1 << (puzzles[0] - 'a')) //异或 清零
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
@ -82,7 +82,7 @@ X & ~X = 0
|
||||
|0762|Prime Number of Set Bits in Binary Representation|[Go]({{< relref "/ChapterFour/0700~0799/0762.Prime-Number-of-Set-Bits-in-Binary-Representation.md" >}})|Easy| O(n)| O(1)||65.8%|
|
||||
|0784|Letter Case Permutation|[Go]({{< relref "/ChapterFour/0700~0799/0784.Letter-Case-Permutation.md" >}})|Medium| O(n)| O(1)||70.6%|
|
||||
|0810|Chalkboard XOR Game|[Go]({{< relref "/ChapterFour/0800~0899/0810.Chalkboard-XOR-Game.md" >}})|Hard||||51.9%|
|
||||
|0864|Shortest Path to Get All Keys|[Go]({{< relref "/ChapterFour/0800~0899/0864.Shortest-Path-to-Get-All-Keys.md" >}})|Hard||||43.4%|
|
||||
|0864|Shortest Path to Get All Keys|[Go]({{< relref "/ChapterFour/0800~0899/0864.Shortest-Path-to-Get-All-Keys.md" >}})|Hard||||43.5%|
|
||||
|0898|Bitwise ORs of Subarrays|[Go]({{< relref "/ChapterFour/0800~0899/0898.Bitwise-ORs-of-Subarrays.md" >}})|Medium| O(n)| O(1)||36.2%|
|
||||
|0980|Unique Paths III|[Go]({{< relref "/ChapterFour/0900~0999/0980.Unique-Paths-III.md" >}})|Hard||||79.2%|
|
||||
|0995|Minimum Number of K Consecutive Bit Flips|[Go]({{< relref "/ChapterFour/0900~0999/0995.Minimum-Number-of-K-Consecutive-Bit-Flips.md" >}})|Hard||||50.3%|
|
||||
|
@ -65,7 +65,7 @@ weight: 10
|
||||
|0839|Similar String Groups|[Go]({{< relref "/ChapterFour/0800~0899/0839.Similar-String-Groups.md" >}})|Hard||||44.1%|
|
||||
|0841|Keys and Rooms|[Go]({{< relref "/ChapterFour/0800~0899/0841.Keys-and-Rooms.md" >}})|Medium||||67.8%|
|
||||
|0863|All Nodes Distance K in Binary Tree|[Go]({{< relref "/ChapterFour/0800~0899/0863.All-Nodes-Distance-K-in-Binary-Tree.md" >}})|Medium||||59.9%|
|
||||
|0864|Shortest Path to Get All Keys|[Go]({{< relref "/ChapterFour/0800~0899/0864.Shortest-Path-to-Get-All-Keys.md" >}})|Hard||||43.4%|
|
||||
|0864|Shortest Path to Get All Keys|[Go]({{< relref "/ChapterFour/0800~0899/0864.Shortest-Path-to-Get-All-Keys.md" >}})|Hard||||43.5%|
|
||||
|0909|Snakes and Ladders|[Go]({{< relref "/ChapterFour/0900~0999/0909.Snakes-and-Ladders.md" >}})|Medium||||39.7%|
|
||||
|0924|Minimize Malware Spread|[Go]({{< relref "/ChapterFour/0900~0999/0924.Minimize-Malware-Spread.md" >}})|Hard||||41.8%|
|
||||
|0928|Minimize Malware Spread II|[Go]({{< relref "/ChapterFour/0900~0999/0928.Minimize-Malware-Spread-II.md" >}})|Hard||||41.8%|
|
||||
|
@ -124,7 +124,7 @@ weight: 12
|
||||
|1442|Count Triplets That Can Form Two Arrays of Equal XOR|[Go]({{< relref "/ChapterFour/1400~1499/1442.Count-Triplets-That-Can-Form-Two-Arrays-of-Equal-XOR.md" >}})|Medium||||73.8%|
|
||||
|1486|XOR Operation in an Array|[Go]({{< relref "/ChapterFour/1400~1499/1486.XOR-Operation-in-an-Array.md" >}})|Easy||||84.0%|
|
||||
|1512|Number of Good Pairs|[Go]({{< relref "/ChapterFour/1500~1599/1512.Number-of-Good-Pairs.md" >}})|Easy||||87.7%|
|
||||
|1551|Minimum Operations to Make Array Equal|[Go]({{< relref "/ChapterFour/1500~1599/1551.Minimum-Operations-to-Make-Array-Equal.md" >}})|Medium||||80.6%|
|
||||
|1551|Minimum Operations to Make Array Equal|[Go]({{< relref "/ChapterFour/1500~1599/1551.Minimum-Operations-to-Make-Array-Equal.md" >}})|Medium||||80.7%|
|
||||
|1573|Number of Ways to Split a String|[Go]({{< relref "/ChapterFour/1500~1599/1573.Number-of-Ways-to-Split-a-String.md" >}})|Medium||||31.4%|
|
||||
|1648|Sell Diminishing-Valued Colored Balls|[Go]({{< relref "/ChapterFour/1600~1699/1648.Sell-Diminishing-Valued-Colored-Balls.md" >}})|Medium||||31.5%|
|
||||
|1680|Concatenation of Consecutive Binary Numbers|[Go]({{< relref "/ChapterFour/1600~1699/1680.Concatenation-of-Consecutive-Binary-Numbers.md" >}})|Medium||||52.5%|
|
||||
|
Reference in New Issue
Block a user