반응형
1. 문제
- 문자열 s가 주어질 때, 반복되지 않는 문자 중 가장 먼저 등장하는 문자의 인덱스를 반환하라.
- 없으면 -1을 반환하라.
2. 해결
function firstUniqChar(s: string): number {
const map = new Map<string, {idx:number, count:number}>();
let index = 0;
for(const char of s) {
if(!map.has(char)) map.set(char, {idx: index, count:1});
else {
const {idx, count} = map.get(char);
map.set(char, {idx, count: count + 1});
}
index++;
}
let minIdx = Number.MAX_SAFE_INTEGER;
for(const [key, value] of map) {
if(value.count === 1 && value.idx < minIdx) {
minIdx = value.idx;
}
}
return minIdx === Number.MAX_SAFE_INTEGER ? -1 : minIdx
};
- 문자열을 우선 탐색하면서, Map에 {idx, count} 형태의 정보를 담음.
- 이후 map을 탐색하면서, count가 1이었던 애들과 최소 인덱스를 찾아 반환.