mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
algorithm: first unique char in a string (#1103)
* feat: Added Algo first unique char in a string. * Optimised algo to linear time complexity * removed double quotes * Review changes: if-else logic
This commit is contained in:
@ -299,6 +299,7 @@
|
||||
* [CountVowels](String/CountVowels.js)
|
||||
* [CreatePermutations](String/CreatePermutations.js)
|
||||
* [DiceCoefficient](String/DiceCoefficient.js)
|
||||
* [FirstUniqueCharacter](String/FirstUniqueCharacter.js)
|
||||
* [FormatPhoneNumber](String/FormatPhoneNumber.js)
|
||||
* [GenerateGUID](String/GenerateGUID.js)
|
||||
* [HammingDistance](String/HammingDistance.js)
|
||||
|
30
String/FirstUniqueCharacter.js
Normal file
30
String/FirstUniqueCharacter.js
Normal file
@ -0,0 +1,30 @@
|
||||
/**
|
||||
* @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 }
|
9
String/test/FirstUniqueCharacter.test.js
Normal file
9
String/test/FirstUniqueCharacter.test.js
Normal file
@ -0,0 +1,9 @@
|
||||
import { firstUniqChar } from '../FirstUniqueCharacter'
|
||||
|
||||
describe('firstUniqChar', () => {
|
||||
it('locates the index of first unique character in the string', () => {
|
||||
expect(firstUniqChar('javascript')).toEqual(0)
|
||||
expect(firstUniqChar('sesquipedalian')).toEqual(3)
|
||||
expect(firstUniqChar('aabb')).toEqual(-1)
|
||||
})
|
||||
})
|
Reference in New Issue
Block a user