Problema con il prefisso comune più lungo (LCP).

Google Translate Icon

Scrivere un algoritmo efficiente per trovare il prefisso comune (LCP) più lungo tra un dato insieme di stringhe.

Per esempio,

Input:  technique, technician, technology, technical
Output: The longest common prefix is techn
 
 
Input:  techie delight, tech, techie, technology, technical
Output: The longest common prefix is tech

Pratica questo problema

Una soluzione semplice consiste nel considerare ogni stringa e calcolare il suo prefisso comune più lungo con il prefisso comune più lungo delle stringhe elaborate finora. La complessità temporale di questa soluzione è O(N.M), dove N è il numero totale di parole e M è la lunghezza massima di una parola.

Questo è dimostrato di seguito in C++, Java e Python:

C++


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

Java


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

Python


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

Possiamo anche usare il Dividi e conquista tecnica per trovare il prefisso comune più lungo (LCP). Come tutti gli algoritmi divide et impera, l'idea è di dividere le stringhe in due insiemi più piccoli e quindi elaborare ricorsivamente tali insiemi. Questo è simile al unisci ordinamento routine, tranne per il fatto che troviamo l'LCP delle due metà invece di unire entrambe le metà.

C++


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

Java


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

Python


Scaricare  Esegui codice

Risultato:

The longest common prefix is tech

La complessità temporale della soluzione di cui sopra è O(N.M), dove N è il numero totale di parole e M è la lunghezza massima di una parola. Lo spazio ausiliario utilizzato è O(M.log(N)) per lo call stack.

 
Vedi anche:

Prefisso comune più lungo in un dato set di stringhe (usando Trie)

Vota questo post

Voto medio 4.78/5. Conteggio voti: 201

Nessun voto finora! Sii il primo a votare questo post.

Ci dispiace che questo post non ti sia stato utile!

Ci racconti come possiamo migliorare questo post?




Grazie per aver letto.

Si prega di utilizzare il nostro compilatore in linea per pubblicare codice nei commenti utilizzando C, C++, Java, Python, JavaScript, C#, PHP e molti altri linguaggi di programmazione popolari.

Come noi? Segnalaci i tuoi amici e aiutaci a crescere. Buona codifica :)



sottoscrivi
Notifica di
guest
3 Commenti
Il più votato
Il più recente Il più antico
Feedback in linea
Visualizza tutti i commenti
NON seguire questo link o verrai bannato dal sito!