더북(TheBook)

002 반복되지 않는 첫 번째 문자 찾기

 

문자열에서 반복되지 않는 첫 번째 문자를 찾는 해법은 여러 가지가 있다. 보통은 문자열을 한 번 순회하거나 또는 문자열을 더 완전하고 부분적으로 순회해서 문제를 해결할 수 있다.

한 번 순회하는 방식에서는 배열을 생성해 문자열에서 한 번만 나오는 문자들의 인덱스를 저장한다. 이후 반복되지 않는 문자들을 포함하는 이 배열에서 가장 작은 인덱스를 반환한다.

private static final int EXTENDED_ASCII_CODES = 256;
...
public char firstNonRepeatedCharacter(String str) {
  int[] flags = new int[EXTENDED_ASCII_CODES];

  for (int i = 0; i < flags.length; i++) {
    flags[i] = -1;
  }

  for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    if (flags[ch] == -1) {
      flags[ch] = i;
    } else {
      flags[ch] = -2;
    }
  }

  int position = Integer.MAX_VALUE;

  for (int i = 0; i < EXTENDED_ASCII_CODES; i++) {
    if (flags[i] >= 0) {
      position = Math.min(position, flags[i]);
    }
  }

  return position == Integer.MAX_VALUE ?
    Character.MIN_VALUE : str.charAt(position);
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.