Минимальное количество альтернативных подпоследовательностей, которые необходимо удалить, чтобы очистить двоичную строку.

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

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

Примеры:

Input: S = “010101”
Output: 1
Explanation:
Below are the operations performed:
Operation 1: Consider the subsequence S[0, 5] i.e., “010101” as it contains alternating characters. Therefore, removing this modifies the string to “”.
Hence, the total number of operation required is 1.

Input: S = “00011”
Output: 3

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

  • Инициализируйте переменную, скажем, ans для хранения максимального количества нулей и единиц , которые еще осталось удалить, переменную cnt0 для подсчета количества нулей и переменную cnt1 для подсчета количества единиц.
  • Пройдите заданную строку S с самого начала и выполните следующие шаги:
    • Если текущий символ равен 0 , то увеличьте значение cnt0 на 1 и уменьшите значение cnt1 на 1 , если оно больше 0 .
    • Если текущий символ равен 1 , увеличьте значение cnt1 на 1 и уменьшите значение cnt0 на 1 , если оно больше 0 .
    • Обновите значение ans до максимального числа ans , cnt1 и cnt0 .
  • После выполнения вышеуказанных шагов выведите значение ans как минимальное количество операций, необходимых для удаления всех символов.

Ниже приведена реализация подхода:

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