Форум » Обработка символьных строк » 24 номер 208. Вопрос по решению » Ответить

24 номер 208. Вопрос по решению

AzureUSS: Здравствуйте в задаче 24_208 208) (М. Шагитов) Текстовый файл 24-208.txt содержит строку из десятичных цифр, всего не более чем из 106 символов. Определите максимальное количество идущих подряд символов, среди которых комбинация символов 2022 повторяется не более четырёх раз. В решениях приводится алгоритм # Автор: А. Гнедов s = open('24-208.txt').readline() # s = '1' * 500 + '2022022333' * 8 + '4' * 1000 ans = 0 pos = 0 # первая позиция, входящая в последовательность sub = '2022' buf = [0] * 5 while True: pos = s.find(sub, buf[-1]) if pos == -1: ans = max(ans, len(s) - buf[0]) break else: ans = max(ans, pos - buf.pop(0) + 3) buf.append(pos + 1) print(ans) Получатся, что прибавляется +3 только хвост 2022. Но можно же брать 2_02244444202_2 начало и хвост от 2022 f = open('Q3_4.txt') s = f.readline().replace('2022','a') a = s.split('a') mx = 0 for i in range(len(a)-4): x = 'xxxx'.join(a[i:i+5]) if not(i==0 and s[0]!='a'): x='xxx'+x if not(i==len(a)-5 and s[-1]!='a'): x=x +'xxx' mx = max(mx,len(x)) print(mx)

Ответов - 2

evgenrep: Вы делаете replace, но у вас внутри могут быть пересекающиеся комбинации. Например, 2022022, и это уже считается за 2 раза.

Ж: Это код, который показывает нужную строку и доказывает, что длиннее нет [pre2] f=open('D:/24-208.txt') s=f.readline() for k in range(2502,2504): for i in range(len(s)-k): if s[i:i+k].count('2022')<=4: print(k,'нашлась строка: ',s[i:i+k] ) break else: print(k,'не нашлась строка') [/pre2] Вот код, который задачу решает [pre2] f=open('D:/24-208.txt') s=f.readline() while '2022' in s: s=s.replace('2022','202 022') s=[len(c) for c in s.split()] print(max(sum(s[i:i+5]) for i in range(len(s)-5))-4*2) [/pre2]



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