Return the first word with the greatest number of repeated letters

前端 未结 5 1161
慢半拍i
慢半拍i 2021-01-16 23:16

This is a question from coderbyte’s easy set. Many people asked about it already, but I’m really curious about what’s wrong with my particular solution (I know it’s a pretty

5条回答
  •  悲哀的现实
    2021-01-16 23:38

    You need to move the return word; statement outside of the loop to fix your version.

    I also put together another take on the algorithm that relies on a few built in javascript methods like Array.map and Math.max, just for reference. I ran a few tests and it seems to be a few milliseconds faster, but not by much.

    function LetterCountI(str) {
        var maxCount = 0;
        var word = '-1';
    
        //split string into words based on spaces and count repeated characters
        str.toLowerCase().split(" ").forEach(function(currentWord){
            var hash = {};
    
            //split word into characters and increment a hash map for repeated values
            currentWord.split('').forEach(function(letter){
                if (hash.hasOwnProperty(letter)) {
                    hash[letter]++;
                } else {
                    hash[letter] = 1;
                }           
            });
    
            //covert the hash map to an array of character counts
            var characterCounts = Object.keys(hash).map(function(key){ return hash[key]; });
    
            //find the maximum value in the squashed array
            var currentMaxRepeatedCount = Math.max.apply(null, characterCounts);
    
            //if the current word has a higher repeat count than previous max, replace it
            if (currentMaxRepeatedCount > maxCount) {
                maxCount = currentMaxRepeatedCount;
                word = currentWord;
            }
        });
    
        return word;
    }
    

提交回复
热议问题