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);
}