Проверьте, можно ли получить перестановку S2, добавив или удалив символы из S1.

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

Даны две строки S1 и S2 , состоящие из N и M символов, задача состоит в том, чтобы проверить, можно ли сделать строку S1 равной любой перестановке S2 после добавления или удаления символа простое число раз из строки S1 . Если это возможно, то выведите «Да» . В противном случае выведите «Нет» .

Примеры:

Input: S1 = “gekforgk”, S2 = “geeksforgeeks”
Output: Yes
Explanation:
If character ‘e’ is added 3(which is a prime number) times and character ‘s’ is added two(which is a prime number) times to S1 it will be “gekforgkeeess” which is a permutation of S2. Therefore, print Yes.

Input: S1 = “xyzzyzz”, S2 = “xyy”
Output: No

Подход: Данную задачу можно решить, подсчитав частоты символов в строках S1 и S2 , и если разница в частоте любых символов не является простой, выведите «Нет» . В противном случае выведите «Да» . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте массив частот, скажем, freq[] размером 256 .
  • Перебрать символы строки S1 и для каждого символа уменьшить частоту символа в freq[] на 1 .
  • Перебрать символы строки S2 и для каждого символа увеличить частоту символа в freq[] на 1 .
  • После выполнения вышеуказанных шагов, если абсолютные значения всех элементов в freq[] являются простыми, выведите «Да» . В противном случае выведите «Нет» .

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

Временная сложность: O(max(N, M))
Вспомогательное пространство: O(1)