Форум » Обработка символьных строк » не понимаю, что не так: самое интересное, что ответ моц отличается от правильного ан 3 » Ответить

не понимаю, что не так: самое интересное, что ответ моц отличается от правильного ан 3

Глеб True: (№ 5463) (Е. Джобс) Текстовый файл 24-223.txt содержит строку из символов A, B и C, всего не более чем 106 символов. Найдите максимальную длину строки, состоящей только из комбинаций AB и СAС. Например, в строке BABABCACABCB такая подстрока ABABCACAB (длина 9). 6 вариант Полякова [pre2] s = open('24-223.txt').readline() k = kmax = c = cmax = 0 s = s.replace('AB', '*').replace('CAC', '%') for i in range(len(s)): if s[ i] == '*': k += 2 elif s[ i] == '%': k += 3 else: kmax = max(kmax, k) k = 0 kmax = max(kmax, k) print(kmax) [/pre2]

Ответов - 9

Александр Киселёв: Пробовал разные подходы, разбитие "cacac" на "cac cac" не приводит к правильному ответу, ответ получается больше, чем нужно. И я учитывал, что "cacac" - это 5 символов, всё равно не сходится. Пробовал проходить строку в обратную строну, результат тот же. Если у кого-то получилось решить правильно, скиньте код, пожалуйста.

Lol: Надо разделить строку cacac на cac cac

Поляков: [pre2] s = open('24-223.txt').readline() while 'CACAC' in s: s = s.replace( 'CACAC', 'CAC CAC' ) s = s.replace('AB', '.') s = s.replace('CAC', ',') maxLen = L = 0 for i, ch in enumerate(s): if ch in '.,': L += 2 if ch == '.' else 3 maxLen = max( maxLen, L ) else: L = 0 print( maxLen ) [/pre2]


Александр Киселёв: Извините, не обновил страницу, и не увидел ваш ответ. Спасибо!

elenakr: Но ведь считаем количество символов. В строке "CACAC" их пять. А в строке "CAC CAC" будет посчитано 6. Разбиение данной комбинации на две было бы справедливо, если бы считали количество комбинаций, а не символов.

Александр Киселёв: [pre2]with open('24-223.txt') as file: s = file.read() i = 0 mx = 0 c = 0 while i < len(s): if s[i:i+2] == 'AB': c += 2 i += 2 elif s[i:i+3] == 'CAC': c += 3 i += 3 elif s[i-1:i+2] == 'CAC': mx = max(mx, c) c = 3 i += 2 else: mx = max(mx, c) c = 0 i += 1 print(mx)[/pre2] И кстати, предыдущий комментатор был всё-таки прав, это можно было решить заменой "cacac" на "cac cac". Вот разбор подобной задачи: https://www.youtube.com/watch?v=h-aIhwLMJFs

лиз: f=open('17.txt') s=f.readline() s=s.replace('AB','2') s=s.replace('CAC','3') s=s.replace('B','A') s=s.replace('C','A') s=s.split('A') mx=0 for a in s: b=sum(map(int,str(a))) mx=max(b,mx) print(mx) ответ тоже получаю 66, думаю ошибка, раз у вас также

Inna_sh: [pre2] s=open('24-223.txt').readline() s=s.replace('CACAC','CAC CAC') s=s.replace('AB','2') s=s.replace('CAC','3') s=s.replace('A',' ') s=s.replace('B',' ') s=s.replace('C',' ') s=s.split() maxi=0 for x in range(len(s)): m=s[x].count('2')*2+s[x].count('3')*3 maxi=max(maxi, m) print(maxi) [/pre2] Ответ 69

Inna_sh: [pre2] s=open('24-223.txt').readline() s=s.replace('CACAC','CAC CAC') s=s.replace('AB','2') s=s.replace('CAC','3') s=s.replace('A',' ') s=s.replace('B',' ') s=s.replace('C',' ') s=s.split() maxi=0 for x in range(len(s)): m=s[x].count('2')*2+s[x].count('3')*3 maxi=max(maxi, m) print(maxi) [/pre2] Ответ 69



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