public int NumSimilarGroups(string[] strs) { FindUnion uf = new FindUnion(strs.Length); for (var i = 0; i < strs.Length; i++) { for (int j = i + 1; j < strs.Length; j++) { if (uf.Find(i) != uf.Find(j) && IsSimilar(strs[i], strs[j])) { uf.Union(i, j); } } } return(uf.SetCount); }