Custom Sort String
LeetCode 791. Custom Sort String
원문
You are given two strings order
and s
. All the characters of order
are unique and were sorted in some custom order previously.
Permute the characters of s
so that they match the order that order
was sorted. More specifically, if a character x
occurs before a character y
in order
, then x
should occur before y
in the permuted string.
Return any permutation of s
that satisfies this property.
풀이
order
에 포함된 문자를 키로, 해당 문자가 나타난 횟수를 값으로 가지는 해시 테이블을 만든다.
s
를 순회하며 order
에 포함된 문자가 나타나면 해시 테이블의 해당 값을 갱신한다.
그 다음 order
를 순회하며 해시 테이블에서 각 문자에 해당하는 값 만큼 문자를 결과에 추가하고, s
를 순회하며 order
에 포함되지 않은 문자만 결과에 추가한다.
코드
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
def customSortString(self, order: str, s: str) -> str:
letters = {letter: 0 for letter in order}
result = list()
for letter in s:
if letter in letters:
letters[letter] += 1
for letter in order:
for i in range(letters[letter]):
result.append(letter)
for letter in s:
if letter not in letters:
result.append(letter)
return ''.join(result)
Java
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
class Solution {
public String customSortString(String order, String s) {
Map<Character, Integer> letters = new HashMap<>();
StringBuilder result = new StringBuilder();
for (int i = 0; i < order.length(); i++) {
letters.put(order.charAt(i), 0);
}
for (int i = 0; i < s.length(); i++) {
if (letters.containsKey(s.charAt(i))) {
letters.put(s.charAt(i), letters.get(s.charAt(i)) + 1);
}
}
for (int i = 0; i < order.length(); i++) {
for (int j = 0; j < letters.get(order.charAt(i)); j++) {
result.append(order.charAt(i));
}
}
for (int i = 0; i < s.length(); i++) {
if (!letters.containsKey(s.charAt(i))) {
result.append(s.charAt(i));
}
}
return result.toString();
}
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.