#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:
При поиске символов с максимальным вхождением вы должны различать два разных случая:
-
Символ, на который вы смотрите, встречается столько раз, сколько текущий максимум. Затем вам нужно добавить его в список текущих максимальных символов.
-
Символ, на который вы смотрите, встречается чаще, чем текущий максимум. Затем вам нужно очистить список текущих максимальных символов и добавить в этот список только текущий символ.
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');