2013-10-26 10 views
0

Я занимался вопросом поиска самой длинной подстроки в алфавитном порядке от заданной строки. У меня большой опыт работы на C++, но я абсолютно новый для python. Ive написал этот кодПоиск самой длинной подстроки в алфавитном порядке от заданной строки

s = raw_input("Enter a sentence:") 

a=0 #start int 
b=0 #end integer 
l=0 #length 
i=0 

for i in range(len(s)-1): 
    j=i 
    if j!=len(s)-1: 
    while s[j]<=s[j+1]: 
     j+=1 
    if j-i>l: #length of current longest substring is greater than stored substring 
     l=j-i 
     a=i 
     b=j 

print 'Longest alphabetical string is ',s[i:j] 

Но я продолжаю получать эту ошибку

Traceback (most recent call last): 
    File "E:/python/alphabetical.py", line 13, in <module> 
    while s[j]<=s[j+1]: 
IndexError: string index out of range 

Что я делаю неправильно здесь? Опять же, я очень новичок в python!

+2

Что делать, если строка пуста? – NoChance

+0

Я думаю, что ваша последняя строка должна иметь 's [a: b]' вместо 's [i: j]'. –

+0

Do * not * использовать однобуквенные переменные. В вашем коде вам даже пришлось добавлять комментарии, чтобы мы поняли это! Просто используйте 'a -> start_index',' b -> end_index', 'l -> length' [BTW * never * используйте строчные буквы' L'. во многих шрифтах он слишком похож на '1'. 'i' и' j' приемлемы, поскольку они являются стандартными именами для индексов. – Bakuriu

ответ

0
while s[j]<=s[j+1]: 
    j+=1 

Может сбежать от конца строки.

Try:

while j!=len(s)-1 and s[j]<=s[j+1]: 
    j+=1 

Также подумайте о том, что это значит, когда вы находите конец последовательности, что это алфавитный - есть ли основания для проверки более длинной последовательности, начиная с некоторой позиции позже в этой последовательности?

1

Вы можете использовать этот простой кусок кода, чтобы достичь того, чего вы хотите

s = 'kkocswzjfq' 
char = '' 
temp = '' 
found = '' 
for letter in s: 
    if letter >= char: 
     temp += letter 
    else: 
     temp = letter 
    if len(temp) > len(found): 
     found = temp 
    char = letter 
print(found) 
Смежные вопросы