【LeetCode】839、相似字符串组
文章目录
- 一、并查集
- 1.1 并查集
- 二、多语言解法
一、并查集
1.1 并查集
求共有几组, 联想到并查集, 即并查集有几个集合
字符串相似: 相差0个字符, 或2个字符
其中所有字符串长度都相同, 是比较方便处理的
// go
var sets int
var father [301]intfunc numSimilarGroups(strs []string) int {n := len(strs)m := len(strs[0])build(n)for i := range n {for j := i+1; j < n; j++ {if find(i) == find(j) {continue} // 若已在一个集合中了, 而无需uniondiff := 0 // str[i] 和 str[j] 不同的字符数量for k := 0; k < m && diff < 3; k++ {if strs[i][k] != strs[j][k] {diff++}}if diff == 0 || diff == 2 {union(i, j)}}}return sets
}func build(n int) {for i := range n {father[i] = i}sets = n
}func find(i int) int {if father[i] != i {father[i] = find(father[i])}return father[i]
}func union(a, b int) {fa, fb := find(a), find(b)if fa != fb {father[fa] = fbsets--}
}
参考左神 并查集
二、多语言解法
C p p / G o / P y t h o n / R u s t / J s / T s Cpp/Go/Python/Rust/Js/Ts Cpp/Go/Python/Rust/Js/Ts
// cpp
// go 同上
# python
// rust
// js
// ts