oryginalny problem:
Słowo było K-dobre, jeśli dla każdych dwóch liter w słowie, gdy po raz pierwszy pojawia x
razy, a druga pojawia y
razy, następnie |x - y| ≤ K.
Minimalna znaków, który musiał być usunięty
Podane słowo w, ile liter musi usunąć, aby K-dobre?
Problem Link.
Mam rozwiązać powyższy problem i nie pytając rozwiązanie dla powyższego problemu
Właśnie misread oświadczenie po raz pierwszy i tylko myśli, jak możemy rozwiązać ten problem w liniowym czasie linia, który właśnie doprowadzić do nowego problemu
modyfikacja problemu
słowo było K-dobry jeśli dla każdych dwoma kolejnymi literami w słowie, gdy po raz pierwszy pojawia x
razy, a druga pojawia y
razy, potem |x - y| ≤ K.
Biorąc pod uwagę pewne słowa w, ile liter nie musiał usunąć, aby go K -dobry?
Czy ten problem jest rozwiązywany w czasie liniowym, myślałem o tym, ale nie mogłem znaleźć żadnego prawidłowego rozwiązania.
Rozwiązanie
moje podejście: nie mogłem podejść mój zgniatać ale jej jest moje podejście do tego problemu, spróbować wszystkiego (od filmowego Zooptopia)
tj
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
Dla N
w zakresie 10^5
. Złożoność czasu: czas nie istnieje w tym wymiarze.
Czy istnieje liniowe rozwiązanie tego problemu, proste i słodkie, jak ludzie o 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
to chyba prosty przykład nie może mi bardziej złożony przykład jako usunięcie elementu I makens (i-1) i (i + 1), a z kolei
Czy możesz podać przykład zmodyfikowanego problemu? –
Czy możesz żyć z rozwiązaniem o złożoności = O (n^2)? – AnotherGeek