C'est un algorithme assez commun dans l'analyse de la ligne de commande. Étant donné un ensemble de noms d'options longs prédéfinis, calculez le préfixe le plus court qui identifie de façon unique l'une de ces options. Ainsi, par exemple, pour les options suivantes:Comment calculer les préfixes uniques les plus courts d'un ensemble de chaînes?
-help
-hostname
-portnumber
-name
-polymorphic
Ce serait la sortie:
-he
-ho
-por
-n
-pol
Je pense deux façons de le faire - soit comme un arbre:
*
/| \
/| \
H N P
/\ |
E O O
/\
R L
ou en recherchant des sous-chaînes:
for (String s : strings) {
for (int i = 1; i < s.length(); s++) {
if (search(strings,s.substring(0,i)) == 1) {
result.add(s.substring(0,i);
break;
}
}
}
Donc, la question est:
- Qui iriez-vous?
- Ai-je manqué une troisième voie évidente?
Contexte, contexte, contexte! J'irais pour celui qui était meilleur dans mon scénario. –
L'option 1 semble être la meilleure solution. Rapide, précis et direct ... – Kendrick
Le contexte est l'analyse syntaxique en ligne de commande - il serait donc construit une fois et utilisé une seule fois. Comme il s'agit de garbage collection et que la plupart des systèmes d'exploitation limitent les lignes de commande à moins de 1 Mo, l'utilisation de la mémoire n'est pas un problème. Les performances doivent être équilibrées entre la construction de la structure et la consultation ultérieure, car les deux ne seront généralement effectuées qu'une seule fois. –