参考
考え方
non repeating == unique と関連付ける。
unique -> Set or Map? Set も Map もunique なものしか収納できないので便利。
この問題はindexを求めないといけないので、key(Character),value(Integer(Index))にしたほうが楽。
解答
public int firstUniqChar(String s) {
Map<Character, Integer> input = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char current = s.charAt(i);
if (!input.containsKey(current)) {
input.put(current, i);
} else {
input.put(current, -1);
}
}
int min = Integer.MAX_VALUE;
for (char c : input.keySet()) {
if (input.get(c) != -1) {
min = Math.min(input.get(c), min);
}
}
return min == Integer.MAX_VALUE ? -1 : min;
}
豆知識
put 上書きできる
if(map.containsKey(c)) {
map.put(c, -1);
}else {
map.put(c, i);
}
これで一つずつ取得できる
for(char c : map.keySet()) {
if(map.get(c) != -1) {
min = Math.min(map.get(c), min);
}
}
ifの短縮
min == Integer.MAX_VALUE ? -1 : min;