-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy path839. Similar String Groups
46 lines (43 loc) · 1.06 KB
/
839. Similar String Groups
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class Solution {
public:
int p[300], r[300], sum;
int numSimilarGroups(vector<string>& strs) {
int n = strs.size();
sum = n;
for (int i = 0; i < n; i++) p[i] = i, r[i] = 1;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (similar(strs[i], strs[j])) {
Union(i, j);
}
}
}
return sum;
}
bool similar(string const& s1, string const& s2) {
int diff = 0;
for (int i = 0; i < s1.size(); i++) {
if(s1[i] != s2[i]) {
diff++;
if (diff > 2) return false;
}
}
return diff <= 2;
}
void Union(int i, int j) {
int p1 = find(i);
int p2 = find(j);
if (p1 == p2) return;
if (r[p1] < r[p2]) swap(p1, p2);
p[p2] = p1;
r[p1] += r[p2];
sum--;
}
int find(int i) {
while (i != p[i]) {
p[i] = p[p[i]];
i = p[i];
}
return i;
}
};