From 30d437bff99d6f85f8889087a43f0a2be07ee73a Mon Sep 17 00:00:00 2001 From: farharamadhan2 Date: Sun, 3 Oct 2021 22:08:47 +0700 Subject: [PATCH] Add max word algorithm --- String/MaxWord.js | 36 ++++++++++++++++++++++++++++++++++++ String/test/MaxWord.test.js | 12 ++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 String/MaxWord.js create mode 100644 String/test/MaxWord.test.js diff --git a/String/MaxWord.js b/String/MaxWord.js new file mode 100644 index 000000000..c3ac637ea --- /dev/null +++ b/String/MaxWord.js @@ -0,0 +1,36 @@ +// Given a sentence, return the most occuring word + +/** + * @param {string} sentence - the sentence you want to find the most occuring word + * @returns {string} - the most occuring word + * + * @example + * - maxWord('lala lili lala'); // lala + */ +const maxWord = (sentence = '') => { + if (typeof sentence !== 'string') { + throw new TypeError('the param sould be string') + } + + if (!sentence) { + return null + } + + const words = sentence.split(' ') + if (words.length < 2) { + return words[0] + } + + const occurrences = {} + words.forEach(word => { + occurrences[word.toLocaleLowerCase()] = occurrences[word.toLocaleLowerCase()] + 1 || 1 + }) + + const max = Object.keys(occurrences).reduce((n, word) => { + if (occurrences[word] > n.count) { return { word, count: occurrences[word] } } else { return n } + }, { word: '', count: 0 }) + + return max.word +} + +export { maxWord } diff --git a/String/test/MaxWord.test.js b/String/test/MaxWord.test.js new file mode 100644 index 000000000..8a5852ad6 --- /dev/null +++ b/String/test/MaxWord.test.js @@ -0,0 +1,12 @@ +import { maxWord } from '../MaxWord' + +describe('Testing the maxWord function', () => { + it('Expect throw with non string argument', () => { + expect(() => maxWord(10)).toThrow() + }) + it('get the max word', () => { + const string = 'ba ba ba ba banana' + const mostOccuringWord = maxWord(string) + expect(mostOccuringWord).toBe('ba') + }) +})