leetcode 1202. 交换字符串中的元素(并查集)

给你一个字符串 s,以及该字符串中的一些「索引对」数组 pairs,其中 pairs[i] = [a, b] 表示字符串中的两个索引(编号从 0 开始)。

你可以 任意多次交换 在 pairs 中任意一对索引处的字符。

返回在经过若干次交换后,s 可以变成的按字典序最小的字符串。

示例 1:

输入:s = “dcab”, pairs = [[0,3],[1,2]]
输出:“bacd”
解释:
交换 s[0] 和 s[3], s = “bcad”
交换 s[1] 和 s[2], s = “bacd”

代码

class Solution {int[] fa;public void  init(){for(int i=0;i<fa.length;i++)fa[i]=i;}public int  find(int x){if(x!=fa[x])fa[x]=find(fa[x]);return fa[x];}
/*    public void   union(int x,int y){fa[find(x)]=find(y);}*/public String smallestStringWithSwaps(String s, List<List<Integer>> pairs) {int n=s.length();fa=new int[n];init();for(List<Integer> t:pairs){union(t.get(1),t.get(0));}Map<Integer,List<Character> > map=new HashMap<>();for(int i=0;i<n;i++){int par=find(i);if(!map.containsKey(par)) map.put(par,new ArrayList<>());map.get(par).add(s.charAt(i));//纪录同一个父节点的字符}for(List<Character > characters:map.values()){Collections.sort(characters);//将属于同一个字符集的字符排序}StringBuilder stringBuilder=new StringBuilder();for(int i=0;i<n;i++)//将排序后的各个字符插回字符串中{List t=map.get(find(i));stringBuilder.append(t.remove(0));}return stringBuilder.toString();}public void   union(int x,int y){x=find(x);y=find(y);if(x==y) return;fa[x]=y;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/392333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vim 下web开发html css js插件

Vim下的Web开发之html,CSS,javascript插件HTML 下载HTML.zip 解压HTML.zip&#xff0c;然后将里面的所有文件copy到C:\Program Files\Vim\vimfiles目录下首先&#xff0c;你应该把“ filetype plugin on ”写入你的vimrc。重启vim。新建一个test.html文件。用gvim打开按 "…

为什么用scrum_为什么Scrum糟糕于数据科学

为什么用scrumScrum is a popular methodology for PM in software engineering and recently the trend has carried over to data science. While the utility of Scrum in standard software engineering may remain up for debate, here I will detail why it has unquesti…

Android_Event Bus 的基本用法

1 //事件总线分发2 public class MainActivity extends ActionBarActivity {3 Button button;4 TextView text;5 6 Override7 protected void onCreate(Bundle savedInstanceState) {8 super.onCreate(savedInstanceState);9 setContentView(R…

leetcode 1203. 项目管理(拓扑排序)

公司共有 n 个项目和 m 个小组&#xff0c;每个项目要不无人接手&#xff0c;要不就由 m 个小组之一负责。 group[i] 表示第 i 个项目所属的小组&#xff0c;如果这个项目目前无人接手&#xff0c;那么 group[i] 就等于 -1。&#xff08;项目和小组都是从零开始编号的&#xf…

谷歌cloud_通过使用Google Cloud ML大规模提供机器学习模型,我们学到了什么

谷歌cloudby Daitan通过大潭 通过使用Google Cloud ML大规模提供机器学习模型&#xff0c;我们学到了什么 (What we learned by serving machine learning models at scale using Google Cloud ML) By Bruno Schionato, Diego Domingos, Fernando Moraes, Gustavo Rozato, Isa…

php企业黄页源码,PHPCMS 企业黄页模块 v9 GBK 正式版

PHPCMS V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展&#xff0c;代码维护&#xff0c;优秀的二次开发能力&#xff0c;可满足所有网站的应用需求。PHPCMS V9企业黄页主要特色1、模型自定义&#xff0c;支持模型添加、修改…

跨域配置

SpringBoot跨域配置 我们的后端使用Spring Boot。Spring Boot跨域非常简单&#xff0c;只需书写以下代码即可。 Configuration public class CustomCORSConfiguration {private CorsConfiguration buildConfig() {CorsConfiguration corsConfiguration new CorsConfiguration(…

fromEvent

fromEvent(selector,Event) 实际效果图 这个功能和cad 3dmax里面的鼠标定位功能一致吧&#xff0c;是不是有点小成就&#xff1f; 转载于:https://www.cnblogs.com/xiongwei2017/p/7074180.html

java开发第一天上班_从第一天开始,如何成为一名优秀的团队合作伙伴,成为初级开发人员

java开发第一天上班One of the many things you might be asking yourself when starting your software development career is:在开始软件开发职业时&#xff0c;您可能会问自己很多事情之一&#xff1a; “How do I REALLY contribute to my new team?”“我如何真正为我的…

java虚拟机编译文件,理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么...

理解Java虚拟机(1)之一个.java文件编译成.class文件发生了什么最近在看《深入理解Java虚拟机》弄明白了很多java的底层知识&#xff0c;决定分几部分总结下&#xff0c;从.java文件编译&#xff0c;到类加载机制&#xff0c;内存分配垃圾回收机制&#xff0c;线程并发&#xff…

leetcode 684. 冗余连接()

在本问题中, 树指的是一个连通且无环的无向图。 输入一个图&#xff0c;该图由一个有着N个节点 (节点值不重复1, 2, …, N) 的树及一条附加的边构成。附加的边的两个顶点包含在1到N中间&#xff0c;这条附加的边不属于树中已存在的边。 结果图是一个以边组成的二维数组。每一…

Go-如何读取yaml,json,ini等配置文件

1. json使用 JSON 应该比较熟悉&#xff0c;它是一种轻量级的数据交换格式。层次结构简洁清晰 &#xff0c;易于阅读和编写&#xff0c;同时也易于机器解析和生成。 创建 conf.json&#xff1a;{"enabled": true,"path": "/usr/local" }新建conf…

SQL转化为MapReduce的过程

转载&#xff1a;http://www.cnblogs.com/yaojingang/p/5446310.html 在了解了MapReduce实现SQL基本操作之后&#xff0c;我们来看看Hive是如何将SQL转化为MapReduce任务的&#xff0c;整个编译过程分为六个阶段&#xff1a; Antlr定义SQL的语法规则&#xff0c;完成SQL词法&am…

使用集合映射和关联关系映射_使用R进行基因ID映射

使用集合映射和关联关系映射Inter-conversion of gene ID’s is the most important aspect enabling genomic and proteomic data analysis. There are multiple tools available each with its own drawbacks. While performing enrichment analysis on Mass Spectrometry da…

leetcode 1018. 可被 5 整除的二进制前缀

给定由若干 0 和 1 组成的数组 A。我们定义 N_i&#xff1a;从 A[0] 到 A[i] 的第 i 个子数组被解释为一个二进制数&#xff08;从最高有效位到最低有效位&#xff09;。 返回布尔值列表 answer&#xff0c;只有当 N_i 可以被 5 整除时&#xff0c;答案 answer[i] 为 true&…

纯java应用搭建,16、BoneCp纯java项目使用

2、代码实现 package com.study;import com.jolbox.bonecp.BoneCP;import com.jolbox.bonecp.BoneCPConfig;import com.jolbox.bonecp.BoneCPDataSource;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import java.sql.*;/*** Boncp 纯java处理* CreateTime 2018/3/…

数据结构与算法深入学习_我最喜欢的免费课程,用于深入学习数据结构和算法...

数据结构与算法深入学习by javinpaul由javinpaul Data structures and algorithms are some of the most essential topics for programmers, both to get a job and to do well on a job. Good knowledge of data structures and algorithms is the foundation of writing go…

RabbitMQ学习系列(一): 介绍

1、介绍 RabbitMQ是一个由erlang开发的基于AMQP&#xff08;Advanced Message Queue &#xff09;协议的开源实现。用于在分布式系统中存储转发消息&#xff0c;在易用性、扩展性、高可用性等方面都非常的优秀。是当前最主流的消息中间件之一。 RabbitMQ的官网&#xff1a;http…

详尽kmp_详尽的分步指南,用于数据准备

详尽kmp表中的内容 (Table of Content) Introduction 介绍 What is Data Preparation 什么是数据准备 Exploratory Data Analysis (EDA) 探索性数据分析(EDA) Data Preprocessing 数据预处理 Data Splitting 数据分割 介绍 (Introduction) Before we get into this, I want to …

leetcode 947. 移除最多的同行或同列石头(dfs)

n 块石头放置在二维平面中的一些整数坐标点上。每个坐标点上最多只能有一块石头。 如果一块石头的 同行或者同列 上有其他石头存在&#xff0c;那么就可以移除这块石头。 给你一个长度为 n 的数组 stones &#xff0c;其中 stones[i] [xi, yi] 表示第 i 块石头的位置&#x…