2017-09-13 19 views
0

文字列内の最長の部分文字列をアルファベット順に出力するプログラムを作成しようとしています。私はすぐに、「x」の反復ごとに、結果としてインデックスをインクリメントしていますのでインデックスエラー:文字列インデックスが範囲外ですpython

s = 'azcbobobegghakl' 
n = 0 
longest = "a" 

while n < len(s): 
    x = n 
    for i in s: 
     if s[x + 1] >= s[x]: 
      x += 1 
     else: 
      break 

    sub_string = (s[n:x+1]) 
    if len(sub_string) > len(longest): 
    longest = sub_string 
    n += 1 

プリント(+最長の「アルファベット順で最長の部分文字列は次のとおりです。」)ここで は私のコードです範囲外になります。私はこれを回避する方法があるかどうかだけ考えている。おかげさまで

+0

私はいくつかのインデントを壊しています。 –

+0

インデントが壊れていると、nの値が増えません。ブレークステートメントにヒットしない限り、無限ループになります – AK47

+0

ありがとうございます。ここにコードを書いている間にインデントを逃した。しかし、それは私の問題をまだ解決しません。しかし、ありがとう。 – Tpenny

答えて

0

これを試してください: -

s = 'azcbobobegghakl' 
n = 0 
longest = "a" 
while n < len(s): 
    x = n 
    for i in s: 
     if x+1<len(s) and s[x + 1] >= s[x]: 
      x += 1 
     else: 
      break 
    sub_string = (s[n:x+1]) 
    if len(sub_string) > len(longest): 
     longest = sub_string 
    n += 1 
print(longest) 

EDIT:n = len(s)-1 S [X + 1]が無効であるSのn番目の文字を指します場合。それで、あなたはそれを保つために追加の条件x+1<len(s)が必要でした。

+1

それはawsome男だった。あなたは私がこれを解決しようとした時間を信じていないだろう。ありがとうございました – Tpenny

+0

@ jeanなぜ彼のコードがコメントで機能していないのか説明しました。とにかく私は編集を行います。指してくれてありがとう。 – markroxor

関連する問題