2017-07-03 4 views
0

Le code fonctionne correctement et la sortie semble correcte. Mais mon print est à l'intérieur de la boucle, ce qui me fait douter que le codage est correct:Ecrivez un programme qui imprime la plus longue sous-chaîne de s dans laquelle les lettres apparaissent dans l'ordre alphabétique

s = 'azcbobobegghakl' 
i = 0 
increase = 0 
longest = 1 
for i in range(len(s) - 1): 
     if s[i+1] >= s[i]: 
      increase +=1 
     else: 
      if increase > longest: 
       longest = increase 
       print (" 
Longest substring in alphabetical order is:"+""+s[i-longest:i+1]) 

      increase =0 
+0

merci de l'aide! –

Répondre

0
#With the help of MIT pythontutor(www.pythontutor.com) and 
their exercise code test machine,I reworte my code and achieve its function in any string. 


i = 0 
increase = 0 
longest = 0 
tem_longest= 0 
max_i = 0 
start = 0 
end = 0 
for i in range(len(s)-1): 
     if s[i+1] >= s[i]: 
      increase +=1 
      tem_longest = increase 
      max_i=i+1 
      if increase==(len(s)-1): 
       longest = increase 
       max_i=i+1 
       start = max_i-longest 
       end = max_i+1 
       break 
     else: 
      max_i=i 
      tem_longest = increase 
      increase =0 

     if tem_longest > longest: 
      longest = tem_longest 
      start = max_i-longest 
      end = max_i+1 

     if i+1 == (len(s)-1) and tem_longest == 0 and longest == 0: 
      start = 0 
      end = 1 

print ("Longest substring in alphabetical order is:"+""+s[start:end]) 
0

Vos doutes sont justes. Au lieu d'une impression immédiate, souvenez-vous simplement de l'index i et de la longueur longest (ou des bordures de sous-chaîne), et affichez la meilleure chaîne après la boucle.

if increase > longest: 
      longest = increase 
      beststart = i-longest 
      bestend = i+1 
      increase = 0 
+0

Base sur le test de réponse, je reworte mon code. –

1

Je voudrais écrire comme ceci:

s = 'abcaakabcdeakk' 
i = 0 
increase = 0 
longest = 1 
longest_end = 1 
for i in range(len(s)): 
     if i < len(s)-1 and s[i+1] >= s[i]: 
      increase += 1 
     else: 
      if increase > longest: 
       longest = increase 
       longest_end = i 
      increase = 0 
print ("Longest substring in alphabetical order is:" + s[longest_end-longest:longest_end+1])