더북(TheBook)

012 중복 문자 제거

 

StringBuilder를 사용하는 해법부터 알아보자. 이 해법에서는 대개 주어진 문자열의 문자를 순회하며 고유한 문자를 포함하는 새 문자열을 구성해야 한다(자바에서 문자열은 불변이므로 주어진 문자열에서 그냥 문자를 제거할 수는 없다).

StringBuilder 클래스는 indexOf()라는 주어진 문자열에서 명시한 부분 문자열(이 문제에서는 명시한 문자)이 처음 나오는 인덱스를 반환하는 메서드를 제공한다. 따라서 한 가지 가능한 해법은 주어진 문자열의 문자를 순회하며 현재 문자에 indexOf() 메서드를 호출해 -1을 반환하면(음수는 StringBuilder가 현재 문자를 포함하지 않는다는 뜻이다) 해당 문자를 StringBuilder에 하나씩 추가하는 것이다.

public static String removeDuplicates(String str) {
  char[] chArray = str.toCharArray(); // 또는 charAt(i)를 사용한다
  StringBuilder sb = new StringBuilder();

  for (char ch : chArray) {
    if (sb.indexOf(String.valueOf(ch)) == -1) {
      sb.append(ch);
    }
  }
  return sb.toString();
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.