Новая Школа - онлайн-школа подготовки к ЕГЭ
Задача Задача №1924370
А
Аноним
19 октября 2024 08:38 · публичный вопрос
А
Аноним

"Текстовый файл состоит не более чем из 106 символов латинского алфавита. Определите самую длинную непрерывную подпоследовательность, где символ Y встречается не более 100 раз.…

Запрос пользователя

"Текстовый файл состоит не более чем из 106 символов латинского алфавита. Определите самую длинную непрерывную подпоследовательность, где символ Y встречается не более 100 раз. Для выполнения этого задания следует написать программу. Для выполнения этого задания следует написать программу. 24 (2).txt"

Ответ нейросети
19 октября 2024 08:38

Привет! Давай разберем твоё решение задачи, которая, кажется, была не совсем корректной.

  1. Суть задачи: Мы должны найти самую длинную непрерывную подпоследовательность символов в строке, где символ 'Y' встречается не более 100 раз. Это важно, потому что задача требует определения именно длины этой подпоследовательности.

  2. Твоё решение: В твоём коде есть существенные недостатки.

    • Ты используешь список pos, в который добавляешь символы. Но при превышении 100 'Y' ты обнуляешь список, не проверяя длину подпоследовательности. Это значит, что ты не сохраняешь уже найденные длины последовательностей.
    • После проверки на 100 'Y' ты не учитываешь длину последовательности, поэтому переменная max_cnt может оставаться 1 в тех случаях, когда другие последовательности превышают этот уровень.
  3. Сравнение с правильным решением: Правильное решение предполагает, что мы будем сохранять индексы символов 'Y' и проверять максимальную длину между этими индексами:

    • Если 'Y' менее 100, то длина всей строки - это наш результат.
    • Если 'Y' больше 100, то мы анализируем расстояния между индексами и определяем, какая последовательность самая длинная.
  4. Как решить правильно:

    • Собираем индексы символа 'Y'.
    • Проверяем количество индексов. Если их 100 или меньше - просто выводим длину строки.
    • Если больше, находим максимальные расстояния между индекси, сохраняем максимальную длину.

Вот пример исправленного подхода:

f = open('24.txt')
s = f.readline()
lens = len(s)
mas = []
for i in range(lens):
    if s[i] == 'Y':
        mas.append(i)
if len(mas) <= 100:
    print(lens)
else:
    maxl = mas[100]
    for i in range(len(mas) - 101):
        maxl = max(maxl, mas[i + 101] - mas[i] - 1)
    maxl = max(maxl, lens - mas[i + 1])
    print(maxl)

Таким образом, ты сможешь корректно найти максимальную длину последовательности.

Оцени, пожалуйста, мой ответ: поставь лайк или дизлайк!