📋 Условие
Решение 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
Задача 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))))