Минимальная стоимость построения подпоследовательности длины K из заданной строки S

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

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

Примеры:

Input: S = “aabcbc”, K = 3, cost[] = {2, 1, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}
Output: 4
Explanation:
One way to construct a string of size K(= 3) is:
Form the string “abb” taking two ‘b’s with a cost of (2*1 = 2), and one ‘a’ with a cost of (1*2 = 2).
Therefore, the total cost to construct the string “abb” is (2 + 2 = 4), which is the minimum possible.

Input: S = “aaaca”, K = 1, cost[] = {2, 1, 3, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9}
Output: 2

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

  • Инициализируйте вектор пары char и int, скажем, V для хранения символа и стоимость этого персонажа.
  • Кроме того, инициализируйте карту, скажем, mp с ключом в виде символа и значением в виде целых чисел, чтобы сохранить частоту каждого символа строки S .
  • Пройдите по заданной строке, используя переменную i , и на каждой итерации увеличивайте значение mp[S[i]] .
  • Переберите диапазон [0, 25], используя переменную i , и на каждой итерации добавьте пару {char('a' + i), cost[i]} к вектору пар V .
  • Отсортируйте вектор пар V[]по второму элементу пары.
  • Теперь инициализируйте переменную, скажем, minCost как 0 , чтобы сохранить минимальную стоимость подпоследовательности длины K.
  • Переберите диапазон [0, 25], используя переменную i , и выполните следующие шаги:
    • Инициализировать переменную, скажем, считать как mp['a' + i] .
    • Если значение count меньше K , то добавьте значение count*V[i].second к значению minCost и обновите значение K до K – count .
    • В противном случае добавьте K*V[i].second к значению minCost и прервите цикл.
  • После выполнения вышеуказанных шагов выведите в качестве результата значение minCost .

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

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