📋 Условие

Решение 24ой задачи методом двойного цикла раньше никогда не разбиралось, несмотря на то, что этот метод чрезвычайно прост и эффективен.

🔍 Подробное решение

Решение 24ой задачи методом двойного цикла — простой и эффективный метод.

Задача 1: В текстовом файле находится цепочка из символов латинского алфавита A, B, C, D, E, F. Найдите длину самой длинной подцепочки, состоящей из символов A, B, E, F (в произвольном порядке).

```python
s = open('files/k7a-3.txt').readline()
m = 0
for l in range(len(s)):
for r in range(l+m, len(s)):
c = s[l:r+1]
if 'C' not in c and 'D' not in c:
m = max(m, len(c))
else:
break
print(m)
```

Задача 2: Максимальная длина подстроки без сочетания QW.

Задача 3: Максимальная длина подстроки, в которой Y встречается не более 150 раз.

Задача 4: Максимальная длина подстроки, в которой CD встречается ровно 160 раз.

Задача 5 (минимум):
```python
for r in range(l+m, l, -1):
if c.count('Z') >= 120:
m = min(m, len(c))
```

Задача 10: Символ, который чаще всего встречается после X.
```python
s = open('24-s2.txt').readline()
from collections import Counter
pairs = [s[i]+s[i+1] for i in range(len(s)-1) if s[i] == 'X']
print(Counter(pairs).most_common(1))
```

Ответы: 20, 5267, 5195, 9712, 2310, 644, 35, 1310, 20, U1618, W1608

📚 Теория

Обработка текстовых данных. Двойной цикл Кабанова — универсальный метод.

🐍 Шаблон Python

Python
s = open('24_28765.txt').readline()
m = 5  # максимум
for l in range(len(s)):
    for r in range(l + m, len(s)):
        c = s[l:r+1]
        if c.count('BC') > 180:  # меняем условие под задачу
            break
        else:
            m = max(m, len(c))
print(m)

🐍 Альтернативный способ

Способ 2
# Способ 1 — счётчик
f = open('24.txt')
s = f.readline()
k = m = 0
for i in range(len(s)-1):
    if s[i] in 'ABC' and s[i+1] not in 'ABC':
        k += 1
        m = max(k, m)
    else:
        k = 0
print(m)

# Способ 2 — регулярки
from re import *
pattern = r'(?:[1-9][0-9]*|0)(?:[-*][0-9]+)*'
print(max(map(len, findall(pattern, s))))