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:
Kartik Kapgate
2022-09-22 17:20:04 +05:30
committed by GitHub
parent c7f9bf961c
commit d05bbf77c6
3 changed files with 40 additions and 0 deletions

View File

@ -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)

View 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 }

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