Algorithms and Data Structures implemented in JavaScript for beginners, following best practices.
|
|
/**
|
||
|
|
* @function firstUniqChar
|
||
|
|
* @description Given a string str, find the first non-repeating character in it and return its index. If it does not exist, return -1.
|
||
|
|
* @param {String} str - The input string
|
||
|
|
* @return {Number} - The index of first unique character.
|
||
|
|
* @example firstUniqChar("javascript") => 0
|
||
|
|
* @example firstUniqChar("sesquipedalian") => 3
|
||
|
|
* @example firstUniqChar("aabb") => -1
|
||
|
|
*/
|
||
|
|
|
||
|
|
const firstUniqChar = (str) => {
|
||
|
|
if (typeof str !== 'string') {
|
||
|
|
throw new TypeError('Argument should be string')
|
||
|
|
}
|
||
|
|
const count = new Map()
|
||
|
|
|
||
|
|
for (const char of str) {
|
||
|
|
if (!count[char]) {
|
||
|
|
count[char] = 1
|
||
|
|
} else {
|
||
|
|
count[char]++
|
||
|
|
}
|
||
|
|
}
|
||
|
|
for (let i = 0; i < str.length; i++) {
|
||
|
|
if (count[str[i]] === 1) return i
|
||
|
|
}
|
||
|
|
return -1
|
||
|
|
}
|
||
|
|
|
||
|
|
export { firstUniqChar }
|