Преобразуйте заданные строки в T, заменяя символы между строками любое количество раз

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

Учитывая массив arr[] из N строк и строку T размера M , задача состоит в том, чтобы проверить, возможно ли сделать все строки в массиве arr[] такими же, как строка T , удалив любой символ из одной строки. , например, arr[i] и вставить его в любую позицию в другую строку arr[j] любое количество раз.

Примеры:

Input: arr[] = {“abc”, “abb”, “acc”}, T = “abc”
Output: Yes
Explanation:
Below is one of the possible way to make the all strings in the array to the string T is:

  • Remove character at index 2 of the string arr[1](= “abb”) and then insert it at the index 1 of the string arr[2](= “acc”). After this the array modifies to {“abc”, “”ab”, “abcc”}.
  • Remove character at index 3 of the string arr[2](= “abcc”) and then insert it at the index 2 of the string arr[1]( = “ab”). After this the array modifies to {“abc”, “”abc”, “abc”}.

After the above steps, all the strings of the array arr[] are equal to the string T(= abc). Therefore, print Yes.

Input: arr[] = {“abc”, “bbb”, “ccc”}, T = “abc”
Output: No

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

  • None строка содержит какой-либо символ, которого нет в T .
  • Все символы T должны присутствовать N раз во всех заданных строках S[] вместе взятых.

Следуйте инструкциям, чтобы решить проблему:

  • Инициализируйте два массива, скажем, freqS[256] и freqT[256] со значением 0 , чтобы хранить частоту символов, присутствующих во всех строках массива, arr[] и строке T соответственно.
  • Пройдите по заданному массиву строк arr[] и сохраните частоту символа для каждой строки в массиве freqS[] .
  • Перебрать символы строки T и сохранить частоту символа строки T в массиве freqT[] .
  • Выполните итерацию в диапазоне [0, 255], используя переменную i , и выполните следующие шаги:
    • Если значение freqS[i] и freqT[i] равно 0 или значение freqS[i] равно N*freq[T] , то продолжаем итерацию.
    • В противном случае инициализируйте логическую переменную, скажите A как истину и прервите цикл.
  • После выполнения вышеуказанных шагов, если значение A истинно, выведите «No» . В противном случае выведите « Да ».

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

Временная сложность: O(N*L + M), где L — длина самой длинной строки в массиве arr[].
Вспомогательное пространство: O(26)