[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 ...
随机推荐
- idea破解失效:cant obtain ticket from http://idea.iteblog.com/key.php
破解idea错误描述:cant obtain ticket from http://idea.iteblog.com/key.php idea破解失效 解决方案: 打开链接: http://ide ...
- Mysql 创建及导入表
连接数据库 打开命令行输入mysql -uroot -p 进行数据库连接 创建并访问数据库 CREATE DATABASE test: //创建数据库test SHOW DATABSAES; //查看 ...
- day11函数(形参实参)
形参与实参 def fn(形参们): pass # 形参:定义函数,在括号内声明的变量名,用来结束外界传来的值# 实参:调用函数,在括号内传入的实际值,值可以为常量.变量.表达式或三者的组合 # 注: ...
- 用for; while...do; do...while; 写出九九乘法表
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【RL-TCPnet网络教程】第6章 RL-TCPnet底层驱动说明
第6章 RL-TCPnet底层驱动说明 本章节为大家讲解RL-TCPnet的底层驱动,主要是STM32自带MAC的驱动实现和PHY的驱动实现. 6.1 初学者重要提示 6.2 KEI ...
- 【二代示波器教程】第15章 FreeRTOS操作系统版本二代示波器实现
第15章 FreeRTOS操作系统版本二代示波器实现 本章教程为大家讲解FreeRTOS操作系统版本的二代示波器实现.主要讲解RTOS设计框架,即各个任务实现的功能,任务间的通信方案选择,任务 ...
- 剑指Offer全解
二维数组中的查找 描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中 ...
- Python面试真题第二节
26.字符串a = "not 404 found 张三 99 深圳",每个词中间是空格,用正则过滤掉英文和数字,最终输出"张三 深圳" 27.filter方法求 ...
- python 模拟豆瓣登录(豆瓣6.0)
最近在学习python爬虫,看到网上有很多关于模拟豆瓣登录的例子,随意找了一个试了下,发现不能运行,对比了一下代码和豆瓣网站,发现原来是豆瓣网站做了修改,增加了反爬措施. 首先看下要模拟登录的网站: ...
- 【mysql】Date和String的互相转换(DATE_FORMAT & STR_TO_DATE)
1.Date ——> String 使用的函数:DATE_FORMAT(date,format) date:需要转换的日期 format:格式化的样式 format样式整 ...