본문 바로가기
Java/Coding-Test

[Java] 1-6 중복문자제거

by JS1111 2022. 1. 13.

문제

소문자로 된 한개의 문자열이 입력되면 중복된 문자를 제거하고 출력하는 프로그램을 작성하세요.
중복이 제거된 문자열의 각 문자는 원래 문자열의 순서를 유지합니다.

입력

첫 줄에 문자열이 입력됩니다. 문자열의 길이는 100을 넘지 않는다.

출력

첫 줄에 중복문자가 제거된 문자열을 출력합니다.

예시 입력

ksekkset

예시 출력

kset

출처

인프런 - 자바-알고리즘-문제풀이-코테대비

내 풀이

private static String removeDuplicate1(String input) {  
     Set set = new LinkedHashSet<>();  
     for (char ch : input.toCharArray()) {  
         set.add(ch);  
     }  
     StringBuilder result = new StringBuilder();  
     set.stream().forEach(result::append);  
     return result.toString();  
}

순서가 저장되고 중복이 안되는 LinkedHashSet을 사용


private static String removeDuplicate2(String input) {  
    StringBuilder result = new StringBuilder();  
    input.chars()  
          .distinct()  
          .forEach(result::appendCodePoint);  
    return result.toString();  
}

Streamdistinct()를 이용하여 중복을 제거


private static String removeDuplicate3(String input) {  
    StringBuilder result = new StringBuilder();  
    for (char ch : input.toCharArray()) {  
        if (result.indexOf(ch + "") < 0) {  
            result.append(ch);  
        }  
    }  
    return result.toString();  
}

indexOf()로 중복여부를 확인한후 없으면 결과에 추가한다

다른 풀이

public String solution(String str){
        String answer="";
        for(int i=0; i < str.length(); i++){
            //System.out.println(str.charAt(i)+" "+i+" "+str.indexOf(str.charAt(i)));
            if(str.indexOf(str.charAt(i))==i) 
                answer+=str.charAt(i);
        }
        return answer;
}

indexOf()는 찾는 값이 중복되도 맨처음 찾은 위치를 반환하는 것을 이용

기억할 점

String.chars()는 IntStream을 반환한다

char형 Stream은 없으니 주의

input.chars()                 // IntStream
        .mapToObj(c->(char)c) // Stream<Character>

int형(유니코드 codepoint)으로 문자열을 만드려면 StringBuilder.appendCodePoint를 사용하자

StringBuilder result = new StringBuilder();  
input.chars()  
        .distinct()  
        .forEach(result::appendCodePoint);

'Java > Coding-Test' 카테고리의 다른 글

[Java] 1-9 숫자만 추출  (0) 2022.01.15
[Java] 1-8 유효한 팰린드롬  (0) 2022.01.15
[Java] 1-7 회문 문자열  (0) 2022.01.14
[Java] 1-3 문장 속 단어  (0) 2022.01.08
[Java] 1-1 문자찾기  (0) 2022.01.04

댓글