En Python, dada la siguiente permutación de a, b, c, d, e, f, g, h, i, j, ¿cuál es la próxima permutación en el orden lexicográfico (diccionario)?

Hay un algoritmo que necesita saber para generar la próxima permutación lexicográficamente después de una permutación determinada. Tiene 4 pasos:

  1. Encuentre el índice más alto i tal que s[i] < s[i+1] . Si no existe dicho índice, la permutación es la última permutación.
  2. Encuentre el índice más alto j > i tal que s[j] > s[i] . Tal j debe existir, ya que i+1 es dicho índice.
  3. Cambie s[i] con s[j] .
  4. Invierta el orden de todos los elementos después del índice i hasta el último elemento.

Fuente – Algoritmo para encontrar la próxima mayor permutación de una cadena dada

Aquí está el problema en Hackerrank: resolver más grande es mayor

Y mi solución más bien lamentable:

T = int (input ())
para i en rango (T):
s = lista (input ())
bandera = 0
para i en rango (1, len (s)):
si s [i-1]! = s [i]:
bandera = 1
rotura

if flag == 0: print (‘sin respuesta’)
más:
max_i = 999 # elige algún valor alto arbitrario
para i en rango (1, len (s)):
si s [i-1] <s [i]: max_i = i-1
if max_i == 999: print (‘sin respuesta’)
más:
max_j = 0
para j en rango (max_i + 1, len (s)):
si s [j]> s [max_i]: max_j = j

# swap
temp = s [max_i]
s [max_i] = s [max_j]
s [max_j] = temp
s = ”. unirse (s)
print (s [: max_i + 1] + s [(max_i + 1):] [:: – 1])