[LeetCode] Custom Sort String 自定义排序的字符串
S and T are strings composed of lowercase letters. In S, no letter occurs more than once.
S was sorted in some custom order previously. We want to permute the characters of T so that they match the order that S was sorted. More specifically, if x occurs before y in S, then x should occur before y in the returned string.
Return any permutation of T (as a string) that satisfies this property.
Example :
Input:
S = "cba"
T = "abcd"
Output: "cbad"
Explanation:
"a", "b", "c" appear in S, so the order of "a", "b", "c" should be "c", "b", and "a".
Since "d" does not appear in S, it can be at any position in T. "dcba", "cdba", "cbda" are also valid outputs.
Note:
Shas length at most26, and no character is repeated inS.Thas length at most200.SandTconsist of lowercase letters only.
这道题给了我们两个字符串S和T,让我们将T按照S的顺序进行排序,就是说在S中如果字母x在字母y之前,那么排序后的T中字母x也要在y之前,其他S中未出现的字母位置无所谓。那么我们其实关心的是S中的字母,只要按S中的字母顺序遍历,对于遍历到的每个字母,如果T中有的话,就先排出来,这样等S中的字母遍历完了,再将T中剩下的字母加到后面即可。所以我们先用HashMap统计T中每个字母出现的次数,然后遍历S中的字母,只要T中有,就将该字母重复其出现次数个,加入结果res中,然后将该字母出现次数重置为0。之后再遍历一遍HashMap,将T中其他字母加入结果res中即可,参见代码如下:
解法一:
class Solution {
public:
string customSortString(string S, string T) {
string res = "";
unordered_map<char, int> m;
for (char c : T) ++m[c];
for (char c : S) {
res += string(m[c], c);
m[c] = ;
}
for (auto a : m) {
res += string(a.second, a.first);
}
return res;
}
};
下面这种解法的思路和上面的一样,只不过这里没有使用HashMap,而是使用了一个长度为26的数组,因为题目中说了S和T中都是小写的字母,其他部分没有啥太大的区别,参见代码如下:
解法二:
class Solution {
public:
string customSortString(string S, string T) {
string res = "";
vector<int> cnt(, );
for (char c : T) ++cnt[c - 'a'];
for (char c : S) {
while (cnt[c - 'a']-- > ) res.push_back(c);
}
for (char c : T) {
while (cnt[c - 'a']-- > ) res.push_back(c);
}
return res;
}
};
下面这种方法可以说是简洁的让人发指啊,就两行搞定碉堡了。我们自定义了sort的排序的排序方式,对于字符串T中的任意两个字母a和b,按照其在S中的顺序排序,在S中排前面的在T中也排前面,完全符合题意,所以就能很好的work,参见代码如下:
解法三:
class Solution {
public:
string customSortString(string S, string T) {
sort(T.begin(), T.end(), [&](char a, char b) {return S.find(a) < S.find(b);});
return T;
}
};
下面这种解法没有用到STL中内置的find函数,而是用了HashMap来建立S中每个字母和其出现位置之间的映射,这样在自定义排序方法的时候,就可以直接从HashMap中取位置了,参见代码如下:
解法四:
class Solution {
public:
string customSortString(string S, string T) {
unordered_map<char, int> m;
for (int i = ; i < S.size(); ++i) {
m[S[i]] = i + ;
}
sort(T.begin(), T.end(), [&](char a, char b) {return m[a] < m[b];});
return T;
}
};
类似题目:
https://leetcode.com/problems/custom-sort-string/solution/
https://leetcode.com/problems/custom-sort-string/discuss/116556/Two-Lines-C++
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Custom Sort String 自定义排序的字符串的更多相关文章
- [leetcode]791. Custom Sort String自定义排序字符串
S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...
- 791. Custom Sort String - LeetCode
Question 791. Custom Sort String Solution 题目大意:给你字符的顺序,让你排序另一个字符串. 思路: 输入参数如下: S = "cba" T ...
- Arrays.sort(a) 自定义排序
Arrays.sort(a) 自定义排序,(需实现接口:Comparable) package com.hd; import java.util.Arrays; class Person imple ...
- [Swift]LeetCode791. 自定义字符串排序 | Custom Sort String
S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...
- 【LeetCode】791. Custom Sort String 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 按顺序构造字符串 排序 日期 题目地址:https: ...
- 73th LeetCode Weekly Contest Custom Sort String
S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S was sort ...
- LeetCode 791. Custom Sort String
题目链接:https://leetcode.com/problems/custom-sort-string/description/ S and T are strings composed of l ...
- 791. Custom Sort String字符串保持字母一样,位置可以变
[抄题]: S and T are strings composed of lowercase letters. In S, no letter occurs more than once. S wa ...
- [LeetCode] Special Binary String 特殊的二进制字符串
Special binary strings are binary strings with the following two properties: The number of 0's is eq ...
随机推荐
- Python系列之 - 前端总结
1. python序列化: 字符串 = json.dumps(对象) 对象->字符串 对象 = json.loads(字符串) 字符串->对象 Javascript: 字符串 = JSON ...
- ext.net单元格内容换行显示
增加style .x-grid3-cell-inner { white-space: normal; }
- C#中访问私有成员技巧
源代码是别人的,你就不能修改源代码,只提供给你dll.或者你去维护别人的代码,源代码却有丢失.这样的情况如果你想知道私有成员的值,甚至去想直接调用类里面的私有方法.那怎么办呢?其实在.net中访问私有 ...
- 083_Remove Duplicates from Sorted List
class ListNode: def __init__(self,x): self.val=x self.next=None ####注意这道题并不是把重复元素全部去掉而是保留一个#### #### ...
- CEC和ARC介绍
众所周知,HDMI作为一个数字化视频音频的接收标准,是可以同时传输视频和音频的,当然随着HDMI版本的提升,它的功能也一直在增强.事实上 当HDMI升级到1.3时,人们就发现了HDMI多了一个CEC功 ...
- linux下 vi命令编辑/etc/my.cnf
把my.cnf配置文件加个max_connections包括(插入命令,删除命令,修改命令.退出保存命令) 你要有这个文件写权限,shell下输入: vi /etc/my.cnf 进入vi后,按i移动 ...
- 翻译NYOJ
#include<iostream> #include<string.h> #include<stdio.h> using namespace std; ; int ...
- avalonjs学习笔记之实现一个简单的查询页
官网地址:http://avalonjs.coding.me/ 因为是为了学习js,所以对样式没什么要求,先放效果图: 步骤为:初始页面-------条件查询-------编辑员工1-------保存 ...
- MUI初学1
1.1)官网: http://www.dcloud.io/ 2)案例: http://www.dcloud.io/case/#group-1 3)文档:http://dev.dcloud.net.cn ...
- 2019 Android 高级面试题总结 从java语言到AIDL使用与原理
说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如C ...