Рубрики
Без рубрики

Алгоритмы обучения с использованием JS, Python и Java 4: MaxChar

Это четвертая статья из моих попыток следовать курсу Стивена Гриндерса Udemy в трех разных… С пометкой “алгоритмы”, “новички”, “обучение”, “java”.

Это четвертая статья из моих попыток следовать за Стивеном Гриндер Курс Udemy на трех разных языках.

Первый Я цитирую сегодняшний вопрос:

— Указания, заданные в строке, возвращают символ, который чаще всего используется в строке. — Примеры MAXCHAR(“abcccccccd”) Maxchar(“apple 1231111”)

язык JavaScript:

function maxChar(str) {
    const charMap = {};
    let max = 0;
    let maxChar = '';

    for (let char of str) {
        if (charMap[char]) {
            charMap[char]++
        } else {
            charMap[char] = 1;
        }
    }

    for (let char in charMap) {
        if (charMap[char] > max) {
            max = charMap[char];
            maxChar = char;
        }
    }

    return maxChar;
}

Стивен переписывает первый цикл for как:

    for (let char of str) {
        charMap[char] = charMap[char] + 1 || 1;
    }

Это возможно, потому что anObject['несуществуюЩий ключ'] возвращает не определено , не определено + 1 возвращает NaN , что является ложным.

Питон:

def max_char(str):
    char_map = {}
    max = 0
    max_char = ''

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    for char in char_map:
        if char_map[char] > max:
            max = char_map[char]
            max_char = char

    return max_char

В Python вы не можете просто попробовать char_map[char] , как в JS, потому что это приведет к ошибке ключа, если ключ еще не существует.

Более кратко:

def max_char(str):
    char_map = {}

    for char in str:
        char_map.setdefault(char, 0)
        char_map[char] += 1

    return max(char_map, key=char_map.get)

Источник: https://stackoverflow.com/questions/268272/getting-key-with-maximum-value-in-dictionary max(char_map,.get) совпадает с max(char_map.keys(),.get) . ключ=char_map.get необходим для поиска пары кортежей (ключ, значение) в словаре, чье значение является наибольшим. max({'a': 2, 'b': 1}) возвращает ‘b’.

Ява:

import java.util.HashMap;
import java.util.Map;

public static char maxChar2(String str) {
    Map charMap = new HashMap<>();

    for (char chr : str.toCharArray()) {
        Integer chrCount = charMap.get(chr);
        if (chrCount == null) {
            chrCount = 0;
        }
        charMap.put(chr, chrCount + 1);
    }

    int max = 0;
    char maxChar = '\0';

    for (Map.Entry entry : charMap.entrySet()) {
        int value = entry.getValue();
        if (value > max) {
            max = value;
            maxChar = entry.getKey();
        }
    }

    return maxChar;
}

Использование потока:

public static char maxChar(String str) {
    Map charMap = str.chars()
            .mapToObj(i -> (char) i)
            .collect(Collectors.groupingBy(
                    c -> c, Collectors.counting()));

    return charMap.entrySet().stream()
            .collect(Collectors.groupingBy(
                    Map.Entry::getValue,
                    TreeMap::new,
                    Collectors.mapping(
                            Map.Entry::getKey, Collectors.toList())))
            .lastEntry()
            .getValue()
            .get(0);
}

Оператор возврата может быть упрощен:

    return charMap.entrySet().stream()
            .max(Map.Entry.comparingByValue())
            .get()
            .getKey();

Список литературы: https://codereview.stackexchange.com/questions/133058/print-max-occurring-character-in-a-string https://stackoverflow.com/questions/48280361/how-to-count-occurrences-for-each-value-in-multimap-java https://stackoverflow.com/questions/42060294/using-java8-stream-to-find-the-highest-values-from-map

Оригинал: “https://dev.to/tommy3/learning-algorithms-with-js-python-and-java-4-maxchar-1eo2”