problema originale:
Una parola era K-buono se per ogni due lettere della parola, se il primo appare x
volte e la seconda appare y
volte, poi |x - y| ≤ K.
minima carattere che doveva essere eliminato
Data una parola w, quante lettere deve rimuovere per renderlo K-buono?
Problem Link.
ho risolto il problema di cui sopra e non mi chiede soluzione per quanto sopra problema
Ho appena letto male la dichiarazione per la prima volta e solo pensato come possiamo risolvere questo problema nel tempo la linea lineare, che ha appena dare origine ad un nuovo problema
Modifica problema
una parola era K-buono se per ogni due lettere consecutive nella parola, se il primo appare x
volte e la seconda appare y
volte, poi |x - y| ≤ K.
Data una parola w, quante lettere ha lui di rimuovere per renderlo K -bene?
Questo problema è risolvibile in tempo lineare, ci ho pensato ma non ho trovato nessuna soluzione valida.
Soluzione
mio approccio: non ho potuto avvicino al mio cotta, ma il suo è il mio approccio a questo problema, provare tutto (dal film Zooptopia)
cioè
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
Per N
nel range 10^5
. Complessità del tempo: il tempo non esiste in quella dimensione.
Esiste una soluzione lineare a questo problema, semplice e dolce come le persone dello 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
Credo che questo è un semplice esempio lì mi esempio più complesso, come l'eliminazione di un io elemento makens (I-1) e (I + 1) come consecutiva
Puoi dare un esempio per il tuo problema modificato? –
Riesci a convivere con una soluzione che ha complessità = O (n^2)? – AnotherGeek