791. Custom Sort String
Problem description:
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.
Solution1:
Use STL to solve this question.
1 | class Solution { |
time complexity: $O(nlogn)$
space complexity: $O(1)$
Solution2:
S: customer order
T: string to be sorted
- Use bucket sort to store all the characters in
bucket
. - Walk through
customer order
, the bucket[c] contains the number of occurrence in T. We need to append that many times ofc
in the result string. - Append remaining characters in result string.
1 | class Solution { |
Clarify: what if remaining characters in target not in source?
1 | example: |
1 | class Solution: |
time complexity: $O(n)$
space complexity: $O(n)$
reference:
https://goo.gl/Lef54y
https://goo.gl/aX25f1