2017-07-03 9 views
0

コードは正常に実行され、出力はOKと思われます。文字のアルファベット順の最長部分文字列を出力するプログラムを作成します。

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

助けてくれてありがとう! –

答えて

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

あなたの疑問は正しいです:私のprintは、forループの内側にある。しかし、これは私がコーディングが正しいことを疑うことができます。もし文字列が長く、長い長さのいくつかの適切なサブストリングが含まれている場合は、代わりに即時印刷の出力それらすべて

はちょうどインデックスiと長さlongest(または境界線をサブストリング)、および出力ループの後最高の文字列を覚えています。

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

回答テストに基づいて、私は自分のコードを書き留めます。 –

1

私はこのようにそれを記述します。

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]) 
関連する問題