Форум сайта python.su
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальную длину цепочки вида ABABAB… (составленной из фрагментов AB, последний фрагмент может быть неполным. Я написал вот такую программу, но она не работает. Исправьте пожалуйста!
Заранее спасибо
[code python]
c=1
max=0
s='abababbacccbaab'
x=s.replace('ab' ,'g')
for i in range(len(x)-1):
if x[i]=='g'and x[i+1]=='g':
c=c+2
if max<c:
max=c
c=1
print(c,x) [/code]
Отредактировано Lee (Март 28, 2021 12:02:56)
Офлайн
Да она не так делается.
Надо один раз по строке идти и считать. Также есть состояния такие “видел букву A только что”, “видел букву B только что”, “не видел ни A ни B только что”. Соответственно, в каждой ситуации происходит либо наращивание переменной длины, либо сброс переменной длины. Если у тебя ситуация “видел букву B только что” и тут у тебя на входе буква B, то явно цепочка закончилась и нужно сравнить подсчитанную длину с максимальной длиной. Если же у тебя ситуация “видел букву B только что” и тут у тебя на входе буква A, то явно цепочка продолжается и нужно увеличить подсчитанную длину на единицу и продолжать дальше.
Офлайн
А можете написать пожалуйста?
Офлайн
Lee
Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальную длину цепочки вида ABABAB… (составленной из фрагментов AB, последний фрагмент может быть неполным.
>>> def f(text): ... (ST_NO_AB, ... ST_WAS_A, ... ST_WAS_B, ... ST_END) = (0, 1, 2, 3) ... state = ST_NO_AB ... curlen = maxlen = 0 ... it = iter(text) ... while True: ... c = next(it, None) ... if state == ST_NO_AB: ... if c is None: ... state = ST_END ... elif c == 'A': ... curlen += 1 ... state = ST_WAS_A ... elif c == 'B': ... pass ... elif state == ST_WAS_A: ... if c is None: ... state = ST_END ... elif c == 'B': ... curlen += 1 ... state = ST_WAS_B ... elif c == 'A': ... pass ... else: ... if curlen > maxlen: ... maxlen = curlen ... curlen = 0 ... state = ST_NO_AB ... elif state == ST_WAS_B: ... if c is None: ... state = ST_END ... elif c == 'A': ... curlen += 1 ... state = ST_WAS_A ... elif c == 'B': ... pass ... else: ... if curlen > maxlen: ... maxlen = curlen ... curlen = 0 ... state = ST_NO_AB ... elif state == ST_END: ... if curlen > maxlen: ... maxlen = curlen ... break ... return maxlen ... >>> f('') 0 >>> f('C') 0 >>> f('A') 1 >>> f('B') 0 >>> f('AB') 2 >>> f('BA') 1 >>> f('ABAB') 4 >>> f('ABABA') 5 >>> f('AA') 1 >>> f('BB') 0 >>> f('ABCABACABABA') 5 >>> f('ABCABABACABAB') 5 >>>
with open('file.txt', encoding='utf-8') as fin: out = f(fin.read()) print(out)
Отредактировано py.user.next (Март 28, 2021 23:16:54)
Офлайн
Спасибо!
Офлайн