839 Similar String Groups
1. Question
Input: ["tars","rats","arts","star"]
Output: 22. Implementation
3. Time & Space Complexity
Last updated
Input: ["tars","rats","arts","star"]
Output: 2Last updated
class Solution {
public int numSimilarGroups(String[] A) {
if (A.length <= 1) {
return A.length;
}
UnionFind uf = new UnionFind(A.length);
for (int i = 0; i < A.length - 1; i++) {
for (int j = i + 1; j < A.length; j++) {
if (isSimilar(A[i], A[j])) {
uf.union(i, j);
}
}
}
return uf.count;
}
public boolean isSimilar(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
}
int diff = 0;
for (int i = 0; i < s1.length(); i++) {
if (s1.charAt(i) != s2.charAt(i)) {
++diff;
}
}
return diff == 0 || diff == 2;
}
class UnionFind {
int[] parents;
int[] size;
int count;
public UnionFind(int n) {
parents = new int[n];
size = new int[n];
count = n;
for (int i = 0; i < n; i++) {
parents[i] = i;
size[i] = 1;
}
}
public int find(int id) {
while (id != parents[id]) {
id = parents[id];
}
return id;
}
public void union(int i, int j) {
int rootI = find(i);
int rootJ = find(j);
if (rootI == rootJ) return;
if (size[rootI] < size[rootJ]) {
parents[rootI] = rootJ;
size[rootJ] += size[rootI];
}
else {
parents[rootJ] = rootI;
size[rootI] += size[rootJ];
}
--count;
}
}
}