Форум » Обработка символьных строк » задача 4375 » Ответить

задача 4375

Соловьев: не сходится ответ в задаче 4375: программа выводит ответ 7(цепочка ABCDDEF), а в ответах 8 [pre2] import string with open ('24-178.txt') as f: s=f.readline() c=string.ascii_uppercase count=1 maxim=0 fcount, flag=1, 0 for i in range(1, len(s)-1): if c.index(s[ i])-c.index(s[i-1]) in [1, 0]: if flag==0: fcount+=1 count+=1 maxim=max(maxim, count) else: count=1 flag=1 maxim=max(maxim, count) if i==len(s)-2 and (c.index(s[0])-c.index(s[ i])) in [1, 0]: maxim=max(maxim, count+fcount) maxim=max(maxim, count) print(maxim) [/pre2]

Ответов - 4

Поляков: На примере, приведенном в условии, ваша программа выдает 5, а не 6. С этого и стоит начать искать ошибку.

Alex_R: Поддерживаю. Тоже не сошелся ответ. Получаю ответ 7(цепочка ABCDDEF) [pre2]f = open('24-178.txt') # Открыть файл line = f.readline() # Считать строку f.close() # Закрыть файл strLen = len(line) # Длина строки maxChainLen = 0 # Длина самой длинной цепочки символов maxChain = '' # Самая длинная цепочка символов chain = line[0] # Текущая цепочка (начинается с 0 символа строки) chainLen = 1 # Текущая длина цепочки (как минимум 1 символ в цепочке всегда есть) # Перебор символов строки for i in range(strLen): # Индекс следующего символа j = i + 1 # Если следующий индекс выходит за пределы строки, то сравниваем с нулевым символом т.к. строка закольцована if j >= strLen: j = 0 curCh = ord(line) # Код текущего символа nextCh = ord(line[j]) # Код следующего символа # Цепочка продолжается если коды одинаковы, или следующий больше предыдущего на 1 if (curCh == nextCh) or (nextCh - curCh == 1): chainLen += 1 chain += line[j] # Иначе - цепочка разорвалась else: # Проверка максимальной длины цепочки if chainLen > maxChainLen: maxChainLen = chainLen maxChain = chain # Сброс значений текущей цепочки chainLen = 1 # Текущая длина цепочки (как минимум 1 символ в цепочке всегда есть) chain = line[j] # Текущая цепочка теперь начинается со следующего символа # Если chainLen > 1 то последний и первый символы соединяются в цепь. # Нужно продолжать проверку с начала до первого разрыва цепочки. if chainLen > 1: # Перебор символов строки for i in range(strLen): # Индекс следующего символа j = i + 1 # Если следующий индекс выходит за пределы строки, то сравниваем с нулевым символом т.к. строка закольцована if j >= strLen: j = 0 curCh = ord(line) # Код текущего символа nextCh = ord(line[j]) # Код следующего символа # Цепочка продолжается если коды одинаковы, или следующий больше предыдущего на 1 if (curCh == nextCh) or (nextCh - curCh == 1): chainLen += 1 chain += line[j] # Иначе - цепочка разорвалась else: # Проверка максимальной длины цепочки if chainLen > maxChainLen: maxChainLen = chainLen maxChain = chain # Прерывание поиска break # Вывод длины самой длинной цепочки. Дополнительно: для проверки выводится самая длинная цепочка print(maxChainLen, maxChain) [/pre2]

Поляков: Если замкнуть строку в кольцо, появляется цепочка ABCDDEFR. Вот авторское решение: [pre2] # Автор: В. Якшигулов f = open('24-178.txt') s = f.readline().strip() s = s + s cur = mx = 1 for i in range(1, len(s)): if s[i-1] <= s[ i]: cur += 1 mx = max(mx, cur) else: cur = 1 print(mx) f.close()[/pre2]


Alex_R: Понятно, в заблуждение ввел пример из условия: "Например, для строки CDEABCABC ответом будет 6 (цепочка ABCCDE)." Подумал, что в цепочке буквы должны быть как соседние буквы алфавита.



полная версия страницы