2016-02-12 3 views
0

Хорошо, возможно, мой последний вопрос, я был недостаточно ясен.Возвратите наибольшее количество повторяющихся символов в предложении

Я хочу вернуть слово с самыми повторяющимися символами в строке.

поэтому следующая строка:

There/'s a passage that I got memorized, seems appropriate for this situation: Ezekiel 25,17. 

вернется ["appropriate"].

Но в случае, если существует более одного слова с одинаковым количеством повторяющихся символов, я хотел бы вернуть их все. так что следующая строка

Hello all from Boston 

вернется ["Hello", "all", "boston"]

Вот код, который я до сих пор. Этот код был взят из этого другого StackOverflow thread

function returnRepeatChar(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; 
 
     } 
 
    }); 
 
    
 
    //convert 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; 
 
} 
 

 
console.log(returnRepeatChar("There/'s a passage that I got memorized, seems appropiate for this situation: Ezekiel 25,17.")); //"appropriate"

+1

Для "селезенки Криса", является результатом '[Крис, селезенка] или' [селезенка] '? И «собака человека», «человек, собака» или «человек, собака»? –

+0

Измените слово из строки в массив. Если текущий счетчик больше максимального значения, установите «слово» в массив, содержащий текущее слово. Если текущий счетчик совпадает с максимальным числом, нажмите текущее слово на массив. В противном случае это точно так же, как и у вас. – Barmar

+0

Если вы проигнорируете трудность токенизации слов, вопрос можно разбить на небольшие простые шаги. Создайте массив, который содержит «оценку» для каждого токена, отслеживая, что такое максимальная оценка. Затем возьмите все слова, которые имеют максимальный балл. Функция подсчета слов для слова довольно проста ... это просто цикл. –

ответ

2

Внесите следующие простые изменения в ваш код.

var word = "-1"; 

становится:

var word = []; 

код, который обновляет word становится:

//if the current word has a higher repeat count than previous max, replace it 
if (currentMaxRepeatedCount > maxCount){ 
    maxCount = currentMaxRepeatedCount; 
    word = [currentWord]; 
} else if (currentMaxRepeatedCount == maxCount) { 
    // If it's the same as the max, add it to the list 
    word.push(currentWord); 
} 
+0

Awesome Barmar, который полностью сделал трюк! Спасибо человеку. – Lucky500

-1

Да, вы можете это сделать. попробуйте выполнить следующие сценарии.

function largest(arr){ 
     var sortArr = arr.sort(function(a,b){return b.length - a.length}); 
     return sortArr; 
    } 

    function returnRepeatChar(str){ 
     return largest(str.toLowerCase().split(" ")); 
    } 
    //This function return the sorted of the given string 
    var sorted = returnRepeatChar("There\'s a passage that I got memorized, seems appropriate for this situation: Ezekiel 25,17."); 
alert(sorted); 
+0

Где ваша 'наибольшая' функция подсчитывает количество повторяющихся символов в слове? Похоже, вы просто находите самое длинное слово в предложении. – Barmar

+0

И вы просто возвращаете одно слово, а не все слова с самыми повторениями. – Barmar

+0

Вся разница между этим вопросом и предыдущим вопросом, с которым он связан, состоит в том, что другой вопрос только нашел одно слово, он хочет всех.Вы, кажется, полностью игнорировали эту критическую деталь. – Barmar

Смежные вопросы