C'est un algorithme assez commun dans 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;
}
}
}
3 Réponses :
La solution "Tree" est un cas particulier (bien, en fait, c'est assez général) d'un Patricia Trie . P>
Le premier sera généralement plus rapide à la recherche. Les considérations de mémoire ne sont probablement pas pertinentes pour votre contexte, car elles ne sont pas utilisées en permanence et que vous n'effectuez que la "recherche" une fois. P>
Je ferais l'arbre, a l'air bien.
Vous pouvez accumuler un hachage de chaque sous-chaîne distincte possible. P>
Hashmap<String, String> validSubs = new Hashmap<String, String>();
HashSet<String> usedSubs = new HashSet<String>();
for (String option : options) {
for(int i = 0; i <= option.length; i++) {
String sub = option.substring(0, i);
if(usedSubs.contains(sub)) {
validSubs.remove(sub);
} else {
validSubs.add(sub, option);
usedSubs.add(sub);
}
}
}
Oh, oui, la réponse manquante la plus évidente consiste à utiliser une bibliothèque qui le fait déjà. Comment analyser les arguments de ligne de commande en Java? a > p>
Drôle, vous devriez dire que :) J'utilise réellement JCOMMANDER, mais cela ne supporte pas cela, donc je pensais que je le suggérerais :)
Pour ce que ça vaut la peine: je crois que JCommander soutient désormais les arguments abrégés.
Contexte, contexte, contexte! J'irais pour celui qui était mieux dans mon scénario.
L'option 1 semble être la meilleure façon d'y aller. Fast, précis et droit ...
Le contexte est une analyse de ligne de commande - ainsi, elle serait construite une fois et utilisée une fois. Comme il s'agit de la poubelle collectée et la plupart des systèmes d'exploitation limitent les lignes de commande bien moins de 1 Mo d'utilisation de la mémoire n'est pas un problème. La performance doit être équilibrée entre la construction de la structure et la recherche ultérieure, car, en général, ne sera effectuée qu'une seule fois.
Qu'est-ce que vous optimisez-vous? Vitesse, utilisation de la mémoire, maintenabilité?
Vitesse et maintenabilité Je dirais. Les définitions de l'argument de ligne de commande ne sont généralement analysées qu'une seule fois pour la durée de la demande et les arguments réels sont très analysés plus d'une fois.