Prima trovare tutti i palindromi nella stringa tale che L [i] [j] rappresenta la lunghezza del palindromo più lungo j-esimo che termina a S [ io]. Diciamo che S è la stringa di input. Questo potrebbe essere fatto nel tempo O (N^2) considerando prima i palindromi di lunghezza 1 poi i palindromi di lunghezza 2 e così via. Trovare i palindromi di Length i dopo aver conosciuto tutti i palindromi i-2 di una lunghezza è questione di un confronto di un singolo carattere.
Questo è un problema di programmazione dinamica dopo quello. Sia A [i] rappresenti il più piccolo numero di palindromi in cui è possibile scomporre la sottostringa (S, 0, i-1).
A[i+1] = min_{0 <= j < length(L[i])} A[i - L[i][j]] + 1;
Edit in base alla richiesta di Micron: Ecco l'idea che sta dietro comuting L [i] [j]. Ho appena scritto questo per trasmettere l'idea, il codice potrebbe avere problemi.
// Every single char is palindrome so L[i][0] = 1;
vector<vector<int> > L(S.length(), vector<int>(1,1));
for (i = 0; i < S.length(); i++) {
for (j = 2; j < S.length; j++) {
if (i - j + 1 >= 0 && S[i] == S[i-j + 1]) {
// See if there was a palindrome of length j - 2 ending at S[i-1]
bool inner_palindrome = false;
if (j ==2) {
inner_palindrome = true;
} else {
int k = L[i-1].length;
if (L[i-1][k-1] == j-2 || (k >= 2 && L[i-1][k-2] == j-2)) {
inner_palindrome = true;
}
}
if (inner_palindrome) {
L[i].push_back(j);
}
}
}
}
La mia risposta sarebbe: che tipo di prodotto di ass del lame cerca i palindromi in una stringa. Posso dare un'occhiata più da vicino al tuo piano aziendale, per favore? –
questo è il tipo di domanda in cui una persona può studiarlo per 20, 30 minuti, trovare una soluzione possibile, quindi studiarlo per 1 ora o più e trovare una soluzione migliore o migliore, quindi chiedere a un intervistato e vedere quale soluzione ha in 2 minuti. –
Sono curioso di sapere se questo può essere fatto in un tempo probabilmente subquadratico, forse anche nel tempo di O (n).So come eseguire la pre-elaborazione standard per trovare il palindromo più lungo in ogni posizione in O (n) tempo usando gli alberi di suffisso, ma l'algoritmo iterativo più naturale che posso pensare di fare il resto del calcolo eseguito nel tempo O (n * numero massimo di palindromi massimali sovrapposti). – jonderry