Definición
El rango de una palabra se define como la posición de la palabra cuando todas las permutaciones (o arreglos) posibles de sus letras se ordenan alfabéticamente, como en un diccionario, sin importar si las palabras son significativas o no.
Consideremos estas dos palabras: "azul" y "visto". Para comenzar, escribiríamos todos los arreglos posibles de las letras de estas palabras en orden alfabético:
"blue": "belu","beul","bleu","blue","buel","bule","eblu","ebul","elub","elbu","eubl",
"eulb","lbeu","lbue","lebu","leub","lube","lueb","ubel","uble","uebl","uelb",
"ulbe","uleb"
"seen": "eens","eesn","enes","ense","esen","esne","nees","nese","nsee","seen",
"sene","snee"
Ahora miremos desde la izquierda y encontremos la posición de las palabras que necesitamos. Vemos que la palabra "azul" está en la cuarta posición y "visto" está en la décima posición. Entonces, el rango de la palabra "azul" es 4, y el de "visto" es 10. Esta es la forma general de calcular el rango de una palabra. Asegúrese de comenzar a contar solo desde 1.
Tarea
Su tarea es escribir un código para tomar cualquier palabra como entrada y mostrar su rango. El rango debe ser la salida. Tenga cuidado con las palabras que contienen letras repetidas.
Ejemplos
"prime" -> 94
"super" -> 93
"bless" -> 4
"speech" -> 354
"earth" -> 28
"a" -> 1
"abcd" -> 1
"baa" -> 3
Puede suponer que la entrada está completamente en minúsculas y la entrada solo contendrá caracteres alfabéticos . Además, si se ingresa un espacio en blanco o una cadena no válida, puede devolver cualquier cosa.
Tanteo
Este es el código de golf , por lo que gana el código más corto.
O(n log n)
o menos. (lo siento, no Python) Mi envío (C ++) toma 2.53s para resolver la prueba 14.
['h', 'e', 'l', 'l', 'o']
en lugar de 'hello'
?