더북(TheBook)

다음 해법은 HashSetStringBuilder를 함께 사용한다. HashSet은 중복을 제거하는 역할, StringBuilder는 결과 문자열을 저장하는 역할을 한다. HashSet.add()true를 반환하면 그 문자를 StringBuilder에도 추가한다.

public static String removeDuplicates(String str) {
  char[] chArray = str.toCharArray();
  StringBuilder sb = new StringBuilder();
  Set<Character> chHashSet = new HashSet<>();

  for (char c: chArray) {
    if (chHashSet.add(c)) {
      sb.append(c);
    }
  }
  return sb.toString();
}

지금까지 살펴본 해법은 toCharArray()로 주어진 문자열을 char[]로 변환했다. 두 해법에 모두 str.charAt(position)을 사용해도 된다.

세 번째 해법은 자바 8 함수형 스타일을 사용한다.

public static String removeDuplicates(String str) {
  return Arrays.asList(str.split("")).stream()
    .distinct()
    .collect(Collectors.joining());
}

먼저 주어진 문자열을 Stream<String>으로 변환한다. 이때 각 항목은 각각 하나의 문자다. 이어서 스테이트풀 중간 연산인 distinct()를 적용한다. distinct() 연산은 스트림에서 중복을 제거하므로 중복이 없는 스트림을 반환한다. 끝으로 collect() 종결 연산을 호출해 Collectors.joining()으로 문자를 마주치는 순서대로 하나의 문자열로 이어 붙인다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.