Es un algoritmo bastante común en que analiza la línea de comandos. Dado un conjunto de nombres de opción largos predefinidos, calcule el prefijo más corto que identifica de manera única una de estas opciones. Así, por ejemplo, para las siguientes opciones:¿Cómo se calculan los prefijos únicos más cortos de un conjunto de cadenas?
-help
-hostname
-portnumber
-name
-polymorphic
Ésta sería la salida:
-he
-ho
-por
-n
-pol
estoy pensando dos posibles maneras de hacer esto - ya sea como un árbol:
*
/| \
/| \
H N P
/\ |
E O O
/\
R L
O mediante la búsqueda de subcadenas:
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;
}
}
}
Entonces, la pregunta es:
- ¿Qué irías?
- ¿Me estoy perdiendo una tercera forma obvia?
Contexto, contexto, contexto! Me gustaría ir por el que era mejor en mi escenario. –
La opción 1 parece ser la mejor manera de hacerlo. Rápido, preciso y directo ... – Kendrick
El contexto es un análisis de línea de comandos, por lo que se crearía una vez y se usaría una vez. Como esto es basura recolectada y la mayoría de los sistemas operativos limitan las líneas de comando por debajo de 1 MB de memoria, el uso no es un problema. El rendimiento debe estar equilibrado entre la construcción de la estructura y la búsqueda posterior, ya que ambas, en general, se realizarán una sola vez. –