839. Similar String Groups
Input: A = ["tars","rats","arts","star"]
Output: 2bool isSimilar(const string& s1, const string& s2) {
for (int i = 0, cnt = 0; i < s1.length(); ++i) {
if (s1[i] == s2[i]) continue;
if (++cnt > 2) return false;
}
return true;
}
// Find
int getRoot(vector<int>& roots, int i) {
return roots[i] == i ? i : roots[i] = getRoot(roots, roots[i]);
}
// Union Find Solution
int numSimilarGroups(vector<string>& A) {
int n = A.size(), res = n;
vector<int> roots(n);
for (int i = 0; i < n; ++i) roots[i] = i;
for (int i = 1; i < n; ++i) {
for (int j = 0; j < i; ++j) {
if (!isSimilar(A[i], A[j])) continue;
int r_i = getRoot(roots, i), r_j = getRoot(roots, j);
if (r_i == r_j) continue;
// Union
roots[r_j] = r_i;
--res;
}
}
return res;
}Last updated