| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent 5668e64 commit 00a97d5
2 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,27 @@ | |||
| 1 | + /** | ||
| 2 | + * @function percentageOfLetter | ||
| 3 | + * @description Return the percentage of characters in 'str' | ||
| 4 | + * that equal 'letter' rounded down to the nearest whole percent. | ||
| 5 | + * More info: https://leetcode.com/problems/percentage-of-letter-in-string/ | ||
| 6 | + * @param {String} str | ||
| 7 | + * @param {String} letter | ||
| 8 | + * @returns {Number} | ||
| 9 | + * @example | ||
| 10 | + * const str = 'foobar', const letter = 'o' | ||
| 11 | + * percentageOfLetter(str, letter) // ===> 33 | ||
| 12 | + */ | ||
| 13 | + const percentageOfLetter = (str, letter) => { | ||
| 14 | + if (typeof str !== 'string' || typeof letter !== 'string') { | ||
| 15 | + throw new Error('Input data must be strings') | ||
| 16 | + } | ||
| 17 | + let letterCount = 0 | ||
| 18 | + // Iterate through the whole given text | ||
| 19 | + for (let i = 0; i < str.length; i++) { | ||
| 20 | + // Count how often the letter appears in the word | ||
| 21 | + letterCount += str[i].toLowerCase() === letter.toLowerCase() ? 1 : 0 | ||
| 22 | + } | ||
| 23 | + const percentage = Math.floor((100 * letterCount) / str.length) | ||
| 24 | + return percentage | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + export { percentageOfLetter } | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,16 @@ | |||
| 1 | + import { percentageOfLetter } from '../PercentageOfLetters' | ||
| 2 | + | ||
| 3 | + describe('Percentage of Letters in a String', () => { | ||
| 4 | + test('Calculate percent for lower case', () => { | ||
| 5 | + expect(percentageOfLetter('foobar', 'o')).toEqual(33) | ||
| 6 | + expect(percentageOfLetter('aaabcd', 'a')).toEqual(50) | ||
| 7 | + }) | ||
| 8 | + test('Calculate percent for upper case', () => { | ||
| 9 | + expect(percentageOfLetter('foobar', 'o')).toEqual(33) | ||
| 10 | + expect(percentageOfLetter('aAabcd', 'a')).toEqual(50) | ||
| 11 | + }) | ||
| 12 | + test('Throwing an exception', () => { | ||
| 13 | + expect(() => percentageOfLetter(100, 'string')).toThrow() | ||
| 14 | + expect(() => percentageOfLetter('string', true)).toThrow() | ||
| 15 | + }) | ||
| 16 | + }) | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments