Imprima la subcadena alfabética más larga con Python y para los vínculos, imprima la primera subcadena

Supongamos que s es una cadena de minúsculas. Escriba un progtwig que imprima la subcadena más larga de s en la que las letras aparecen en orden alfabético.

Por ejemplo, si s = ‘azcbobobegghakl’, entonces su progtwig debería imprimir

La subcadena más larga en orden alfabético es: beggh

En el caso de las corbatas, imprime la primera subcadena. Por ejemplo, si s = ‘abcbcd’, entonces su progtwig debería imprimir

La subcadena más larga en orden alfabético es: abc

    Aquí está el código que encontré. ¿Cómo implemento la última condición en la pregunta dada anteriormente con respecto a los lazos?

    *s = raw_input('provide string: ') result = [] final = [] for letters in s: result = result + [letters] if result == sorted(result) and len(result) >= len(final): final = result elif result != sorted(result): result = [result[len(result)-1]] print('Longest substring in alphabetical order is: '+(''.join(final)))* 

    Abordaría el problema de la siguiente manera:

    • Definamos dos cadenas: current cadena current de letras crecientes y la cadena longest actualmente.
    • Ambas cadenas se inicializan con la primera letra. (De esta manera siempre podemos leer su última letra.)
    • Luego iteramos sobre la cadena de entrada s (comenzando con el segundo carácter).
    • Si el carácter actual c cumple el requisito c >= current[-1] , lo agregamos a la solución actual.
    • Posiblemente almacenemos la cadena current como la longest .
    • Si c no cumple con el requisito de pedido, comenzamos con una nueva solución current = c .
    • Finalmente, imprimimos la cadena longest .
     s = "azcbobobegghakl" longest = s[0] current = s[0] for c in s[1:]: if c >= current[-1]: current += c if len(current) > len(longest): longest = current else: current = c print "Longest substring in alphabetical order is:", longest 

    Cómo arreglar tu código wrt. La condición mencionada:

    Use > lugar de >= en la comparación len(result) >= len(final) , es decir, solo actualice la solución final si es más larga , pero no si tiene la misma longitud.


    Teniendo en cuenta el comentario de Dylans.

    Tienes razón. Actualicé tanto el código como la descripción para manejar correctamente el caso cuando s termina con la subcadena alfabética más larga. (Moviéndose de else: dos líneas hacia abajo fue suficiente.)