Текстовый файл состоит из десятичных цифр и заглавных букв латинского алфавита.
Определите в прилагаемом файле максимальное количество идущих подряд символов, оканчивающихся подстрокой 2025:
среди которых буква Y встречается не менее 140 раз, а подстрока 2025 содержится ровно 50 раз.
В ответе запишите число – количество символов в найденной последовательности.
Для выполнения этого задания следует написать программу.
Решение
Строим вспомогательные структуры: префиксные суммы по букве Y и список позиций подстроки 2025.
Для каждой группы из 50 подряд идущих вхождений 2025 перебираем левую границу отрезка так, чтобы внутри было не менее 140 букв Y и длина была максимальной.
📌 Результат: 938.
f = open("24_26549.txt")
s = f.readline()
n = len(s)
# сколько Y встретилось с начала строки до позиции i (не включая i)
y_before = [0] * (n + 1)
for i in range(n):
y_before[i + 1] = y_before[i] + (s[i] == "Y")
# номера позиций, где начинается 2025
starts = []
for i in range(n - 3):
if s[i:i + 4] == "2025":
starts.append(i)
max_len = 0
# берём 50 подряд идущих вхождений 2025, последнее должно быть в конце отрезка
for j in range(49, len(starts)):
right = starts[j] + 3
left_min = starts[j - 50] + 1 if j >= 50 else 0
left_max = starts[j - 49]
left = left_min
while left <= left_max:
y_count = y_before[right + 1] - y_before[left]
if y_count >= 140:
break
left += 1
if left <= left_max:
length = right - left + 1
if length > max_len:
max_len = length
print(max_len)