Оригинальная проблема:
Слово было K-хорошим, если для каждые две буквы в слове, если первый появляется x
раз, а второй появляется y
раз, тогда |x - y| ≤ K.
Учитывая некоторое слово w, сколько букв он должен удалить, чтобы сделать его K-хорошим?
Ссылка на проблему.
Я решил эту проблему и не просил решения для вышеперечисленного Проблема
Я просто неправильно прочитал выражение в первый раз и просто подумал, как мы можем решить эту проблему в линейном времени линии, что только порождает новую проблему
Проблема модификации
Слово было K-хорошим, если для каждого двух последовательных букв в слове, если первый появляется x
раз, а второй появляется y
раз, тогда |x - y| ≤ K.
Учитывая некоторое слово w, сколько букв ему нужно удалить, чтобы сделать его K-хорошим?
Является ли эта проблема разрешимой в линейном времени, я подумал об этом, но не нашел подходящего решения.
Решение
Мой подход: я не мог подойти к моей давке, но она - мой подход к этой проблеме, попробуйте все (из фильма Zooptopia)
то есть.
for i range(0,1<<n): // n length of string
for j in range(0,n):
if(i&(1<<j) is not zero): delete the character
Now check if String is K good
Для N
в диапазоне 10^5
. Сложность времени: времени в этом измерении не существует.
Есть ли линейное решение этой проблемы, простое и приятное, как люди stackoverflow.
For Ex:
String S = AABCBBCB and K=1
If we delete 'B' at index 5 so String S = AABCBCB which is good string
F[A]-F[A]=0
F[B]-F[A]=1
F[C]-F[B]=1
and so on
Я думаю, что это простой пример, я могу более сложный пример как удаление I-элемента makens (I-1) и (I + 1) в качестве последовательного