From 68ca0ceeef34ea82106c3a7fa963021ee2dc8981 Mon Sep 17 00:00:00 2001 From: Fahim Faisaal <57553028+fahimfaisaal@users.noreply.github.com> Date: Thu, 17 Feb 2022 18:00:04 +0600 Subject: [PATCH] merge: optimize the countVowels algo (#886) * pref: optimize the count vowels algo simplify the algo by using regex and String.prototype.match method, and modified the JS Doc * fix: resolve all requests * pref: optimize the algo by regex ignore the useless traverse in best case by the help of regex and String.prototype.replace method * test: add four new test cases * Revert "test: add four new test cases" This reverts commit 4609833da146beafe839682d7558edf9f64c96fc. * style: fromat with standard js --- String/CountVowels.js | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/String/CountVowels.js b/String/CountVowels.js index 9772c28f0..d9dc42368 100644 --- a/String/CountVowels.js +++ b/String/CountVowels.js @@ -1,8 +1,8 @@ /** * @function countVowels * @description Given a string of words or phrases, count the number of vowels. - * @param {String} url - The input string - * @return {Number} count + * @param {String} str - The input string + * @return {Number} - The number of vowels * @example countVowels("ABCDE") => 2 * @example countVowels("Hello") => 2 */ @@ -11,15 +11,11 @@ const countVowels = (str) => { if (typeof str !== 'string') { throw new TypeError('Input should be a string') } - const vowels = new Set(['a', 'e', 'i', 'o', 'u']) - let count = 0 - for (let i = 0; i < str.length; i++) { - const char = str[i].toLowerCase() - if (vowels.has(char)) { - count++ - } - } - return count + + const vowelRegex = /[aeiou]/gi + const vowelsArray = str.match(vowelRegex) || [] + + return vowelsArray.length } export { countVowels }