algorithm: count letters (#1164)

This commit is contained in:
Sandra Laguna
2022-10-19 13:22:27 +02:00
committed by GitHub
parent ff606a019e
commit 55f502e1f1
2 changed files with 66 additions and 0 deletions

33
String/CountLetters.js Normal file
View File

@ -0,0 +1,33 @@
/**
* @function countLetters
* @description Given a string, count the number of each letter.
* @param {String} str - The input string
* @return {Object} - Object with letters and number of times
* @example countLetters("hello") => {h: 1, e: 1, l: 2, o: 1}
*/
const countLetters = (str) => {
const specialChars = /\W/g
if (typeof str !== 'string') {
throw new TypeError('Input should be a string')
}
if (specialChars.test(str)) {
throw new TypeError('Input must not contain special characters')
}
if (/\d/.test(str)) {
throw new TypeError('Input must not contain numbers')
}
const obj = {}
for (let i = 0; i < str.toLowerCase().length; i++) {
const char = str.toLowerCase().charAt(i)
obj[char] = (obj[char] || 0) + 1
}
return obj
}
export { countLetters }

View File

@ -0,0 +1,33 @@
import { countLetters } from '../CountLetters'
describe('CountLetters', () => {
it('expect throws on use wrong param', () => {
expect(() => countLetters(0)).toThrow()
})
it('expect throws when using a number in the string', () => {
expect(() => countLetters('h3llo')).toThrow()
})
it('expect throws when using a special characters in the string', () => {
expect(() => countLetters('hello!')).toThrow()
})
it('count the letters in a string. Allows lower case', () => {
const value = 'hello'
const count = countLetters(value)
expect(count).toEqual({ h: 1, e: 1, l: 2, o: 1 })
})
it('count the letters in a string. Allows upper case', () => {
const value = 'HELLO'
const count = countLetters(value)
expect(count).toEqual({ h: 1, e: 1, l: 2, o: 1 })
})
it('count the letters in a string. Allows upper and lower case', () => {
const value = 'HelLo'
const count = countLetters(value)
expect(count).toEqual({ h: 1, e: 1, l: 2, o: 1 })
})
})