forked from rui-yan/LeetCode-1
-
Notifications
You must be signed in to change notification settings - Fork 0
/
custom-sort-string.py
39 lines (35 loc) · 1.22 KB
/
custom-sort-string.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# Time: O(n)
# Space: O(1)
# 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:
# - S has length at most 26, and no character is repeated in S.
# - T has length at most 200.
# - S and T consist of lowercase letters only.
import collections
class Solution(object):
def customSortString(self, S, T):
"""
:type S: str
:type T: str
:rtype: str
"""
counter, s = collections.Counter(T), set(S)
result = [c*counter[c] for c in S]
result.extend([c*counter for c, counter in counter.iteritems() if c not in s])
return "".join(result)