Учитывая две строки S и T, найдите количество различных вхождений T в S в качестве подпоследовательности.
Примеры:
Input : S = banana, T = ban Output : 3 T appears in S as below three subsequences. [ban], [ba n], [b an] Input : S = geeksforgeeks, T = ge Output : 6 T appears in S as below three subsequences. [ge], [ ge], [g e], [g e] [g e] and [ g e]
Эта проблема может быть рекурсивно определена, как показано ниже.
// Returns count of subsequences of S that match T // m is length of T and n is length of S subsequenceCount(S, T, n, m) // An empty string is subsequence of all. 1) If length of T is 0, return 1. // Else no string can be a sequence of empty S. 2) Else if S is empty, return 0. 3) Else if last characters of S and T don't match, remove last character of S and recur for remaining return subsequenceCount(S, T, n-1, m) 4) Else (Last characters match), the result is sum of two counts. // Remove last character of S and recur. a) subsequenceCount(S, T, n-1, m) + // Remove last characters of S and T, and recur. b) subsequenceCount(S, T, n-1, m-1)
Поскольку в приведенном выше результате повторяемости есть перекрывающиеся подзадачи, мы можем применить подход динамического программирования для решения вышеуказанной проблемы. Мы создаем двумерный массив mat [m + 1] [n + 1], где m — длина строки T, а n — длина строки S. mat [i] [j] обозначает количество различных подпоследовательностей подстроки S (1. .i) и подстрока T (1..j), так что mat [m] [n] содержит наше решение.
|
Джава
|
python3
|
C #
|
PHP
|
Выход:
6
Сложность времени: O (m * n)
Вспомогательное пространство: O (m * n)
Так как mat [i] [j] обращается к элементам только текущей строки и предыдущей строки, мы можем оптимизировать вспомогательное пространство, просто используя две строки, уменьшая пространство только с m * n до 2 * n.
Эта статья предоставлена Уткаршем Триведи . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Найти все различные суммы подмножеств (или подпоследовательностей) массива | Set-2
- Найти все отдельные суммы подмножеств (или подпоследовательностей) массива
- Подсчет различных подпоследовательностей
- Подсчет отдельных элементов в массиве
- Подсчитать подпоследовательность длины три в данной строке
- Подсчитать общую подпоследовательность в двух строках
- Подсчитать всю палиндромную подпоследовательность в данной строке
- Абсолютный отчетливый счет в отсортированном массиве
- Подсчитайте все разные пары с разностью, равной k
- Количество подпоследовательностей, имеющих максимально различные элементы
- Максимальная длина подпоследовательности такая, что смежные элементы подпоследовательности имеют общий множитель
- Найти равные пары подпоследовательности S и подпоследовательности T
- Самая длинная подпоследовательность, такая, что каждый элемент в подпоследовательности формируется путем умножения предыдущего элемента на простое число
- Самая длинная возрастающая подпоследовательность с использованием алгоритма самой длинной общей подпоследовательности
- Частота печати каждого символа сразу после его появления
0.00 (0%) 0 votes