代码:
这题好像写麻烦了
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
int n = strs.length;
List<List<String>> res = new ArrayList<>();
UnionFind uf = new UnionFind(n);
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
if(strs[i].length()!=strs[j].length())continue;
char[] arrayi = strs[i].toCharArray();
char[] arrayj = strs[j].toCharArray();
Arrays.sort(arrayi);
Arrays.sort(arrayj);
boolean f = true;
for(int k=0;k<arrayi.length;k++){
if(arrayi[k]!=arrayj[k]){
f = false;
break;
}
}
if(f==true){
uf.union(i,j);
}
}
}
for(int i=0;i<n;i++){
List<String> list = new ArrayList<>();
for(int j=0;j<n;j++){
if(uf.find(j)==i){
list.add(strs[j]);
}
}
if(list.size()>0){
res.add(list);
}
}
return res;
}
}
class UnionFind{
int[] parent;
public UnionFind(int n){
parent = new int[n];
for(int i=0;i<n;i++)parent[i] = i;
}
public int find(int idx){
if(parent[idx]!=idx){
parent[idx] = find(parent[idx]);
}
return parent[idx];
}
public void union(int idx1,int idx2){
parent[find(idx2)] = find(idx1);
}
}