Количество строк с частотой каждого символа не более K

Опубликовано: 20 Сентября, 2022

Дан массив arr[] , содержащий N строк и целое число K , задача состоит в том, чтобы найти количество строк с частотой каждого символа не более K

Примеры:

Input: arr[] = { “abab”, “derdee”, “erre” }, K = 2
Output: 2
Explanation: Strings with character frequency at most 2 are “abab”, “erre”. Hence count is 2

Input: arr[] = {“ag”, “ka”, “nanana”}, K = 3 
Output: 1

Подход: Идея состоит в том, чтобы пройтись по массиву строк и для каждой строки создать частотную карту символов. Везде, где какой-либо символ имеет частоту больше, чем K , пропустить текущую строку. В противном случае, если ни один символ не имеет частоты больше, чем K , увеличьте количество ответов . Выведите количество, сохраненное в ответе , когда все строки пройдены. Выполните следующие шаги, чтобы решить проблему:

  • Определите функцию isDuogram(string s, int K) и выполните следующие задачи:
    • Инициализируйте вектор freq[26] со значениями 0.
    • Пройдитесь по строке s , используя переменную c , и выполните следующие задачи:
      • Увеличьте количество частот на 1.
    • Итерация в диапазоне [0. 26) с помощью переменной i и выполнить следующие задачи:
      • Если freq[i] больше K , верните false.
    • После выполнения вышеуказанных шагов верните true в качестве ответа.
  • Инициализируйте переменную ans как 0 , чтобы сохранить ответ.
  • Пройдитесь по массиву arr[] с помощью переменной x и выполните следующие задачи:
    • Вызовите функцию isDuogram(x, K) и, если функция возвращает значение true , увеличьте количество ответов на 1.
  • После выполнения вышеуказанных шагов выведите значение ans в качестве ответа.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N*M), где N — размер массива, а M — размер самой длинной строки.
Вспомогательное пространство: O(1)