Как вернуть максимальное вхождение буквы в строку в JavaScript, если мы нашли повторяющееся максимальное вхождение?

#javascript

#javascript

Вопрос:

Мне нужно вернуть максимальное вхождение буквы в строку. Я написал, но он работает частично. Я имею в виду, что максимальное вхождение буквы появляется более одного раза, тогда оно отображается только для 1 буквы.

 function maxChar(str) {
  let obj = {};
  for (let char of str) {
    !obj[char] ? (obj[char] = 1) : obj[char]  ;
  }
  console.log("==obj", obj);
  let maxChar = "";
  let count = 0;
  for (let char in obj) {
    if (obj[char] >= count) {
      count = obj[char];
      maxChar = char;
    }
  }

  console.log(`${maxChar} appear ${count} times`);
}

maxChar("aabbc");
  

я получаю значение в консоли «b появляется 2 раза». Но на самом деле мне нужно показать в консоли «a amp; b появляются 2 раза».

Ответ №1:

При поиске символов с максимальным вхождением вы должны различать два разных случая:

  1. Символ, на который вы смотрите, встречается столько раз, сколько текущий максимум. Затем вам нужно добавить его в список текущих максимальных символов.

  2. Символ, на который вы смотрите, встречается чаще, чем текущий максимум. Затем вам нужно очистить список текущих максимальных символов и добавить в этот список только текущий символ.

 let maxchars = [];
for (let char in obj) {
  if (obj[char] > count) {
    count = obj[char];
    maxchars = [char];
  } 
  else if (obj[char] == count) {
    maxchars.push(char);
  }
}

console.log(`${maxchars.join(' amp; ')} appear ${count} times`);
  

Ответ №2:

Вместо этого вы можете сохранить массив символов:

 function maxChar(str) {
    let obj = {};
    for (let char of str) {
        !obj[char] ? (obj[char] = 1) : obj[char]  ;
    }
    console.log("==obj", obj);
    let maxChars = [];
    let count = 0;
    for (let char in obj) {
        if (obj[char] >= count) {
            if (obj[char] > count) {
                maxChars = [char];
            } else {
                maxChars.push(char);
            }
            count = obj[char];
        }
    }

    console.log(`${maxChars.join(" amp; ")} appear ${count} times`);
}

maxChar("aabbc");
  

Ответ №3:

  • Вы можете получить char array из входной строки, используя String.split('') метод.
  • И из этого массива вы можете получить количество дубликатов каждой буквы, используя Array.reduce метод.
  • Из этой дублированной информации вы можете получить максимальное количество и показать буквы, используя Math.max amp; Array.forEach .

 function maxChar(str) {
  const charArr = str.split('');
  const letterInfo = charArr.reduce((acc, cur) => {
    if (acc[cur] == null) {
      acc[cur] = 1;
    } else {
      acc[cur]   ;
    }
    return acc;
  }, {});
  const maxCount = Math.max(...Object.values(letterInfo));
  
  Object.entries(letterInfo).forEach(([letter, count]) => {
    if (count === maxCount) {
      console.log(`${letter} appear ${count} times`);
    }
  });
}

maxChar("aabbc");  

Ответ №4:

Я просто что-то изменил в вашем коде, и это сработало. Надеюсь, это может вам помочь

 function maxChar(str) {
  let obj = {};
  for (let char of str) {
    !obj[char] ? (obj[char] = 1) : obj[char]  ;
  }
  console.log('==obj', obj);
  let maxChar = '';
  let count = 0;
  for (let char in obj) {
    if (obj[char] > count) {
      count = obj[char];
      maxChar = char;
    } else if (obj[char] === count) {
      maxChar = `${maxChar} amp; ${char}`;
    }
  }

  console.log(`${maxChar} appear ${count} times`);
}

maxChar('aabbc');