[Programmers] #120888 - 중복된 문자 제거 [Java][C++][Python]
[Programmers] #120888 - 중복된 문자 제거 [Java][C++][Python]
1. 아이디어
문자열 my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 반환하는 문제로 해시셋을 활용하면 해결할 수 있다. my_string의 각 문자를 순회하며 해시셋에 존재하지 않는 문자면 결과 문자열에 붙이고, 존재하는 문자면 건너뛰는 과정을 반복했다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N)$ | $O(N)$ |
($N$ = my_string의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import java.util.*;
class Solution {
public String solution(String my_string) {
StringBuilder sb = new StringBuilder();
Set<Character> seen = new HashSet<>();
for (char c : my_string.toCharArray()) {
if (seen.add(c)) sb.append(c);
}
return sb.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <bits/stdc++.h>
using namespace std;
string solution(string my_string) {
string s;
unordered_set<char> seen;
for (char c : my_string) {
if (seen.insert(c).second) s += c;
}
return s;
}
1
2
def solution(my_string):
return "".join(dict.fromkeys(my_string))
dict.fromkeys는 문자열의 각 문자를 키로 하는 딕셔너리를 만든다. 딕셔너리 키는 중복되지 않고 삽입 순서를 유지하므로, 같은 문자는 첫 등장 자리에 하나만 남는다. 이 키들을 join으로 이어 붙여 결과 문자열을 얻는 방식을 활용했다.
This post is licensed under CC BY 4.0 by the author.