mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
algorithm: count letters (#1164)
This commit is contained in:
33
String/CountLetters.js
Normal file
33
String/CountLetters.js
Normal 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 }
|
33
String/test/CountLetters.test.js
Normal file
33
String/test/CountLetters.test.js
Normal 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 })
|
||||||
|
})
|
||||||
|
})
|
Reference in New Issue
Block a user