[leetcode](4.21)2. 按字典序排列最小的等效字符串
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符。举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' == 'c', 'b' == 'd', 'c' == 'e'。
等价字符遵循任何等价关系的一般规则:
- 自反性:'a' == 'a'
- 对称性:'a' == 'b' 则必定有 'b' == 'a'
- 传递性:'a' == 'b' 且 'b' == 'c' 就表明 'a' == 'c'
例如,A 和 B 的等价信息和之前的例子一样,那么 S = "eed", "acd" 或 "aab",这三个字符串都是等价的,而 "aab" 是 S 的按字典序最小的等价字符串
利用 A 和 B 的等价信息,找出并返回 S 的按字典序排列最小的等价字符串。
示例 1:
输入:A = "parker", B = "morris", S = "parser"
输出:"makkek"
解释:根据A和B 中的等价信息,我们可以将这些字符分为[m,p],[a,o],[k,r,s],[e,i] 共 4 组。每组中的字符都是等价的,并按字典序排列。所以答案是"makkek"。
示例 2:
输入:A = "hello", B = "world", S = "hold"
输出:"hdld"
解释:根据A和B 中的等价信息,我们可以将这些字符分为[h,w],[d,e,o],[l,r] 共 3 组。所以只有 S 中的第二个字符'o'变成'd',最后答案为"hdld"。
示例 3:
输入:A = "leetcode", B = "programs", S = "sourcecode"
输出:"aauaaaaada"
解释:我们可以把 A 和 B 中的等价字符分为[a,o,e,r,s,c],[l,p],[g,t]和[d,m] 共 4 组,因此S中除了'u'和'd'之外的所有字母都转化成了'a',最后答案为"aauaaaaada"。
提示:
字符串
A,B和S仅有从'a'到'z'的小写英文字母组成。字符串
A,B和S的长度在1到1000之间。字符串
A和B长度相同。
并查集
class Solution {
public String smallestEquivalentString(String A, String B, String S) {
int []value = new int[26];
for(int i = 0;i < 26;i++)
value[i]=i;
for(int i = 0;i < A.length();i++)
{
if(value[A.charAt(i)-'a'] != value[B.charAt(i)-'a'])
{
int a = value[A.charAt(i)-'a'];
int b = value[B.charAt(i)-'a'];
int min = a<b?a:b;
for(int j = 0;j < 26;j++)
if(value[j]==a||value[j]==b)
value[j]=min;
}
}
String ans = "";
for(int i = 0;i < S.length();i++)
ans = ans + (char)(value[S.charAt(i)-'a']+(int)'a');
return ans;
}
}
[leetcode](4.21)2. 按字典序排列最小的等效字符串的更多相关文章
- [Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串
给出长度相同的两个字符串:A 和 B,其中 A[i] 和 B[i] 是一组等价字符.举个例子,如果 A = "abc" 且 B = "cde",那么就有 'a' ...
- 51Node 1364--- 最大字典序排列(树状数组)
51Node 1364--- 最大字典序排列(树状数组) 1364 最大字典序排列 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 给出一个1至N ...
- 51nod1364 最大字典序排列
不断的在cur的后面找最大的符合条件的数扔到cur的前面. 用线段树维护操作就可以了. #include<cstdio> #include<cstring> #include& ...
- 51nod 1364 最大字典序排列(线段树)
1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字 ...
- 【LeetCode题解】530_二分搜索树的最小绝对值差
目录 [LeetCode题解]530_二分搜索树的最小绝对值差 描述 方法一.中序遍历二分搜索树 思路 Java 代码 Python 代码 [LeetCode题解]530_二分搜索树的最小绝对值差 描 ...
- hdu1027(n个数的按字典序排列的第m个序列)
题目信息:给出n.m,求n个数的按字典序排列的第m个序列 http://acm.hdu.edu.cn/showproblem.php? pid=1027 AC代码: /** *全排列的个数(次序) ...
- poj 1146 ID Codes (字符串处理 生成排列组合 生成当前串的下一个字典序排列 【*模板】 )
ID Codes Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6229 Accepted: 3737 Descript ...
- LeetCode初级算法--设计问题02:最小栈
LeetCode初级算法--设计问题02:最小栈 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net ...
- 【LeetCode算法-21】Merge Two Sorted Lists
LeetCode第21题 Merge two sorted linked lists and return it as a new list. The new list should be made ...
随机推荐
- python语法_模块_re(正则表达)
字符串操作方法有: s = 'hello word' s.find('l') 查询第一个l的索引 s.replace('ll','xx') 替换 s.split('w') 以w进行分割 这些都是完全匹 ...
- 查询Python版本
- Raft协议实战之Redis Sentinel的选举Leader源码解析
这可能是我看过的写的最详细的关于redis 选举的文章了, 原文链接 Raft协议是用来解决分布式系统一致性问题的协议,在很长一段时间,Paxos被认为是解决分布式系统一致性的代名词.但是Paxos难 ...
- MySql的编译安装
一 前期准备 1 cmake包,要求2.8以上版本 https://cmake.org/download/ 2 boost库包 boost Boost库是一个可移植.提供源代码的C++库,作为标准库的 ...
- MapReduce计算模型的优化
MapReduce 计算模型的优化涉及了方方面面的内容,但是主要集中在两个方面:一是计算性能方面的优化:二是I/O操作方面的优化.这其中,又包含六个方面的内容. 1.任务调度 任务调度是Hadoop中 ...
- JS 将表格table导出excel
function tableToExcel(id) { var tb = document.getElementById(id); var html = '<html><head&g ...
- [Swift]LeetCode277. 寻找名人 $ Find the Celebrity
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- 阿里云服务器公网Ip外网无法访问
拥有了自己的服务器后,发现需要各种配置,之前应用公司的服务器的时候,一般通过内网访问,或者外网访问时,很多配置其他人员都已经配置好了,但是现在在自己的服务器上发布自己的网站的时候,才发现事情并没有自己 ...
- 细说javascripe事件传播流程
当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...
- 【Scala篇】--Scala初始与基础
一.前述 Scala是基于JVM的另一个语言. Scala官网6个特征. 1).Java和scala可以混编 2).类型推测(自动推测类型) 3).并发和分布式(Actor) 4).特质,特征(类似j ...