Определение общих букв в наборе слов

Посчитайте частоты 26 букв в каждом слове и возьмите минимум для каждой буквы по всем словам. В результат добавьте букву ровно минимальное число раз.

Короткий ответ

Что ответить на собеседовании

Посчитайте частоты 26 букв в каждом слове и возьмите минимум для каждой буквы по всем словам. В результат добавьте букву ровно минимальное число раз.

Подробный разбор

Ответ с пояснениями

Условие

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

Пример 1: Вход: ["bella", "label", "roller"] Выход: ["e", "l", "l"]

Пример 2: Вход: ["cool", "lock", "cook"] Выход: ["c", "o"]

Ограничения:

  • 1 ≤ words.length ≤ 100
  • 1 ≤ words[i].length ≤ 100
  • words[i] состоит только из строчных английских букв
class Solution {
    public List<String> commonChars(String[] words) {
        
    }
}

Ответ

Посчитайте частоты 26 букв в каждом слове и возьмите минимум для каждой буквы по всем словам. В результат добавьте букву ровно минимальное число раз.

public List<String> commonChars(String[] words) {
    int[] minimum = new int[26];
    java.util.Arrays.fill(minimum, Integer.MAX_VALUE);
    for (String word : words) {
        int[] count = new int[26];
        for (int i = 0; i < word.length(); i++) count[word.charAt(i)-'a']++;
        for (int i = 0; i < 26; i++) minimum[i] = Math.min(minimum[i], count[i]);
    }
    List<String> result = new java.util.ArrayList<>();
    for (int i = 0; i < 26; i++)
        for (int j = 0; j < minimum[i]; j++) result.add(String.valueOf((char)('a'+i)));
    return result;
}

Условие гарантирует хотя бы одно слово и только a–z. Время O(суммы длин + 26·числа слов), рабочая память O(26) без результата. Множество букв потеряло бы повторяющуюся l.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее