https://school.programmers.co.kr/learn/courses/30/lessons/120896?language=java
HashTable 을 써서 각 문자가 몇번 나오는지 저장한후, 해당 HashTable 을 iterate 하며 등장한 횟수가 1일 경우 StringBuilder 에 append 했다. 마지막으로 결과 String을 char[] 로 변환한 뒤 sort 한 후, String으로 재변환하여 리턴하였다.
public String solution(String s)
{
Hashtable<String,Integer> ht = new Hashtable<>();
String[] strArr = s.split("");
for (String str : strArr)
{
ht.merge(str,1,Integer::sum);
}
StringBuilder sb = new StringBuilder();
for (String str : ht.keySet())
{
if (ht.get(str) == 1)
{
sb.append(str);
}
}
char[] charArr = sb.toString().toCharArray();
Arrays.sort(charArr);
return new String(charArr);
}
일단 해시 테이블을 한번 사용해보고 싶어서 사용해서 풀었지만, Map이 더 빠르므로 Map으로 하는게 더 좋았을 것 같다. 추가적으로, 다른 사람의 코드를 살펴보다가, Stream 으로 아주!! 깔끔하게 하신 분의 코드를 봤는데 groupingBy의 사용을 이렇게 하는 거구나 싶었다.
Arrays.stream(s.split(""))
.collect(Collectors.groupingBy(s1 -> s1))
.entrySet()
.stream()
.filter(entry -> entry.getValue().size() <= 1)
.map(Map.Entry::getKey)
.sorted()
.collect(Collectors.joining());