From b898a00a221e6b69f5dff131ecc45206de3bb88c Mon Sep 17 00:00:00 2001 From: alex_p Date: Mon, 31 Oct 2022 22:03:40 +0300 Subject: [PATCH 1/2] algorithm: add PercentageOfLetters algo and a test for it --- String/PercentageOfLetters.js | 28 +++++++++++++++++++++++++ String/test/PercentageOfLetters.test.js | 16 ++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 String/PercentageOfLetters.js create mode 100644 String/test/PercentageOfLetters.test.js diff --git a/String/PercentageOfLetters.js b/String/PercentageOfLetters.js new file mode 100644 index 0000000000..a22a7ae08e --- /dev/null +++ b/String/PercentageOfLetters.js @@ -0,0 +1,28 @@ +/** + * @function percentageOfLetter + * @description Return the percentage of characters in 'str' + * that equal 'letter' rounded down to the nearest whole percent. + * More info: https://leetcode.com/problems/percentage-of-letter-in-string/ + * @param {String} str + * @param {String} letter + * @returns {Number} + * @example + * const str = 'foobar', const letter = 'o' + * percentageOfLetter(str, letter) // ===> 33 + */ +const percentageOfLetter = (str, letter) => { + if (typeof str !== 'string' || typeof letter !== 'string') { + throw new Error('Input data must be strings') + } + let letterCount = 0 + // Iterate through the whole given text + for (let i = 0; i < str.length; i++) { + // Count how often the letter appears in the word + letterCount = str[i].toLowerCase() === letter.toLowerCase() ? letterCount + 1 : letterCount + 0 + } + const percentage = Math.floor((100 * letterCount) / str.length) + + return percentage +} + +export { percentageOfLetter } diff --git a/String/test/PercentageOfLetters.test.js b/String/test/PercentageOfLetters.test.js new file mode 100644 index 0000000000..7a58dd0ecc --- /dev/null +++ b/String/test/PercentageOfLetters.test.js @@ -0,0 +1,16 @@ +import { percentageOfLetter } from '../PercentageOfLetters' + +describe('Percentage of Letters in a String', () => { + test('Calculate percent for lower case', () => { + expect(percentageOfLetter('foobar', 'o')).toEqual(33) + expect(percentageOfLetter('aaabcd', 'a')).toEqual(50) + }) + test('Calculate percent for upper case', () => { + expect(percentageOfLetter('foobar', 'o')).toEqual(33) + expect(percentageOfLetter('aAabcd', 'a')).toEqual(50) + }) + test('Throwing an exception', () => { + expect(() => percentageOfLetter(100, 'string')).toThrow() + expect(() => percentageOfLetter('string', true)).toThrow() + }) +}) From 06992e0021eaa4595b7be330254e07dfd6b4ee35 Mon Sep 17 00:00:00 2001 From: alex_p Date: Mon, 31 Oct 2022 22:41:15 +0300 Subject: [PATCH 2/2] refactor: remove empty line --- String/PercentageOfLetters.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/String/PercentageOfLetters.js b/String/PercentageOfLetters.js index a22a7ae08e..fbd6a03be3 100644 --- a/String/PercentageOfLetters.js +++ b/String/PercentageOfLetters.js @@ -18,10 +18,9 @@ const percentageOfLetter = (str, letter) => { // Iterate through the whole given text for (let i = 0; i < str.length; i++) { // Count how often the letter appears in the word - letterCount = str[i].toLowerCase() === letter.toLowerCase() ? letterCount + 1 : letterCount + 0 + letterCount += str[i].toLowerCase() === letter.toLowerCase() ? 1 : 0 } const percentage = Math.floor((100 * letterCount) / str.length) - return percentage } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy