문제
내가 작성한 정답
import java.util.Arrays;
import java.util.stream.*;
class Solution {
public String solution(String s) {
String answer = "";
int[] arr = new int[26];
for(char c:s.toCharArray()){
arr[(char)(c-'a')]++;
}
return IntStream.range(0,26)
.filter(i->arr[i]==1)
.mapToObj(i->""+(char)(i+'a'))
.sorted()
.collect((Collectors.joining()));
}
}
import java.util.Arrays;
class Solution {
public String solution(String s) {
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
if (s.indexOf(c) == s.lastIndexOf(c)) {
sb.append(c);
}
}
char[] arr = sb.toString().toCharArray();
Arrays.sort(arr);
return new String(arr);
}
}다른 사람들의 정답
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
class Solution {
public String solution(String s) {
return Arrays.stream(s.split("")) // 1. 문자열을 문자 단위로 배열로 쪼갬 ["a","b","c","a","b","c","a","d","c"]
.collect(Collectors.groupingBy(s1 -> s1)) // 2. 각 문자를 키로, 등장한 모든 위치를 값으로 그룹핑
// 결과: {a=[a,a,a], b=[b,b], c=[c,c,c], d=[d]}
.entrySet() // 3. Map을 Entry 스트림으로 변환 [(a,[a,a,a]), (b,[b,b]), ...]
.stream() // 4. 다시 스트림으로 변환
.filter(entry -> entry.getValue().size() <= 1) // 5. 값(List)의 크기가 1인 것만 필터 (한 번만 등장)
// d=[d] → size=1 ✓ 통과, 나머지들은 size>1 ✗ 제외
.map(Map.Entry::getKey) // 6. Entry에서 키(문자열)만 추출 ["d"]
.sorted() // 7. 사전순 정렬 (여러 개면 자동 정렬)
.collect(Collectors.joining()); // 8. 문자열로 합침 "d"
}
}
import java.util.*;
class Solution {
public String solution(String s) {
char[] chars = s.toCharArray();
Map<Character, Integer> charMap = new HashMap();
for(char c : chars){
charMap.put(c, charMap.getOrDefault(c, 0) +1);
}
StringBuilder sb = new StringBuilder();
for(char c : charMap.keySet()){
if( charMap.get(c) == 1){
sb.append(c);
}
}
char[] charArr = sb.toString().toCharArray();
Arrays.sort(charArr);
return new String(charArr);
}
}Share article