2017-09-13 130 views
0

我一直在试图编写一个程序,以字符串的字母顺序打印出最长的子字符串。 这里是我的代码:索引错误:字符串索引超出范围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 

打印(“按字母顺序最长子是:” +最长)

因为我递增的“X”在每次迭代,因此,指数很快超出范围。只是想知道是否有办法解决这个问题。 谢谢。

+0

我看到一些破损的缩进。 –

+0

损坏的缩进,你永远不会增加n的值,它将是一个无限循环,除非它击中你的break语句 – 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) 

编辑:当n = len(s)-1 S [X + 1]将指向S的第n个字符,这是无效的。所以你需要一个额外的条件x+1<len(s)来保持这一点。

+1

这是一个非常男人。你不会相信我试图解决这个问题的时间。感谢一群 – Tpenny

+0

@jean我解释了为什么他的代码在评论中不起作用。无论如何,我会做一个编辑。感谢您指点。 – markroxor