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