Questa è una domanda molto vaga, anche se non è particolarmente difficile se si pensa a questo proposito. Come dici tu, decodificare A3
come AAA
e semplicemente scriverlo sul posto sovrascriverà i caratteri B
e 1
, quindi perché non spostare solo quelli più distanti lungo l'array prima?
Ad esempio, una volta letto A3
, si sa che è necessario creare spazio per un carattere in più, se fosse A4
ne sarebbero necessari due e così via. Per raggiungere questo obiettivo, troverai la fine della stringa nell'array (fai questo in anticipo e memorizzalo come indice).
Poi ciclo, però, spostando i personaggi ai loro nuovi slot:
Per iniziare: A|3|B|1|C|2|||||||
avere una variabile denominata end
memorizzare l'indice 5, vale a dire l'ultimo, non vuota, la voce.
avessi letto nella prima coppia, usando una variabile chiamata cursor
per memorizzare la posizione corrente - quindi dopo aver letto nel A
e 3
sarebbe impostato a 1 (slot con il 3).
Pseudocodice per il trasloco:
var n = array [cursore] - 2; // n = 1, il 3 di A3 e quindi meno 2 per consentire la coppia.
per (i = fine; i> cursor; i ++) { array [i + n] = array [i]; }
Questo lascerebbe con:
A|3|A|3|B|1|C|2|||||
Ora il A
c'è già una volta, quindi ora si vuole scrivere n + 1
A
's a partire dall'indice memorizzato in cursor
:
for(i = cursor; i < cursor + n + 1; i++)
{
array[i] = array[cursor - 1];
}
// increment the cursor afterwards!
cursor += n + 1;
Dando:
A|A|A|A|B|1|C|2|||||
Quindi stai indicando l'inizio della prossima coppia di valori, pronto per andare di nuovo. Mi rendo conto che ci sono alcuni buchi in questa risposta, anche se questo è intenzionale in quanto è una domanda di intervista!Ad esempio, nei casi limite specificati A1B1
, è necessario un ciclo diverso per spostare i caratteri successivi all'indietro anziché in avanti.
Un suggerimento potrebbe essere quello di iniziare la vostra uscita alla fine della matrice e procedere a ritroso. – user1118321
Si prega di definire "sul posto" e la lingua da utilizzare. Questo è banale con un 'preg_replace_callback' in PHP, che è" in-place "come si può ottenere con le lingue a quel livello di astrazione. – deceze
Di posto, voglio dire non usare un altro array per scrivere l'output. Va bene usare variabili temporanee. La lingua sarebbe C/C++. @ user1118321: Non funzionerà poiché è ancora possibile sovrascrivere i valori della stringa codificata originale. Ad esempio: "A1B1". Scrivendo "A" nell'ultima posizione si sovrascriverà il "1" accanto a "B". – Bugaboo