题目:
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.
思路:
感觉这道题目的难度应该为easy才对^_^。我们首先统计出T中所有字符的出现次数,然后顺序遍历S中的每个字符,如果它在T中出现了,就拿出来添加在结果中。最后再将T中剩余的字符添加在结果的末尾即可(当然也可以添加在结果的头部或者任何部位)。算法的时间复杂度和空间复杂度都是O(n)。
代码:
class Solution {
public:
string customSortString(string S, string T) {
unordered_map<char, int> hash; // map from char to its appear count
for (auto c : T) {
++hash[c];
}
string ret;
for (auto s : S) { // insert the chars that appear in S
if (hash.count(s) > 0) {
ret.insert(ret.length(), hash[s], s);
hash[s] = 0;
}
}
for (auto it = hash.begin(); it != hash.end(); ++it) {
if (it->second > 0) { // insert the remaing chars that do not appear in S
ret.insert(ret.length(), it->second, it->first);
}
}
return ret;
}
};
本文介绍了LeetCode第791题的解题报告。题目要求根据已排序字符串S,对字符串T进行排列,使得T中的字符顺序与S相同。通过统计T中字符频率,并按S顺序构造结果,实现O(n)时间复杂度和空间复杂度的解决方案。
9157

被折叠的 条评论
为什么被折叠?



