public class Solution {
public static String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {
int length=s.length();
int[]parent=new int[length];
for(int i=0;i<length;i++)
{
parent[i]=i;
}
for (List<Integer> pair : pairs) {
int a=pair.get(0);
int b=pair.get(1);
union(parent,a,b);
}
HashMap<Integer, ArrayList<Integer>>hm=new HashMap<>();
for(int i=0;i<length;i++)
{
int x=find(parent,i);
if(hm.containsKey(x))
{
ArrayList<Integer> list = hm.get(x);
list.add(i);
}
else {
ArrayList<Integer> list = new ArrayList<>();
list.add(i);
hm.put(x,list);
}
}
char[]chars=new char[length];
Iterator<Map.Entry<Integer, ArrayList<Integer>>> iterator = hm.entrySet().iterator();
while (iterator.hasNext())
{
ArrayList<Integer> value = iterator.next().getValue();
ArrayList<Integer>arr=new ArrayList<>();
for (Integer integer : value) {
arr.add(integer);
}
Collections.sort(arr);
Collections.sort(value,(o1,o2)->{
char c1= s.charAt(o1);
char c2=s.charAt(o2);
if(c1==c2)return 0;
else if(c1<c2)return -1;
return 1;
});
for(int i=0;i<value.size();i++)
{
chars[arr.get(i)]=s.charAt(value.get(i));
}
}
return String.valueOf(chars);
}
//将这两个数并入并查集中
public static void union(int[] parent,int a,int b)
{
parent[find(parent,a)]=find(parent,b);
}
//寻找自己的根节点
public static int find(int[]parent,int a)
{
if(parent[a]!=a)
{
return parent[a]=find(parent,parent[parent[a]]);
}else
return a;
}
public static void main(String[] args) {
String s="pwqlmqm";
ArrayList<List<Integer>> arrayList = new ArrayList<>();
List<Integer>list=new ArrayList<>();
list.add(5);
list.add(3);
arrayList.add(list);
List<Integer>list1=new ArrayList<>();
list1.add(3);
list1.add(0);
arrayList.add(list1);
List<Integer>list2=new ArrayList<>();
list2.add(5);
list2.add(1);
arrayList.add(list2);
List<Integer>list3=new ArrayList<>();
list3.add(1);
list3.add(1);
arrayList.add(list3);
List<Integer>list4=new ArrayList<>();
list4.add(1);
list4.add(5);
arrayList.add(list4);
List<Integer>list5=new ArrayList<>();
list5.add(3);
list5.add(0);
arrayList.add(list5);
List<Integer>list6=new ArrayList<>();
list6.add(0);
list6.add(2);
arrayList.add(list6);
String s1 = smallestStringWithSwaps(s, arrayList);
System.out.println(s1);
}
}
leetcode1202 交换字符串中的元素 最近这么多并查集的题目,就这题还有点意思
最新推荐文章于 2022-01-09 21:53:50 发布