Задача к ЕГЭ по информатике на тему «поиск символа/строки по частоте» №2

В текстовом файле 6.txt. находится цепочка из символов латинского алфавита A, B, C, D, E. Определите количество подстрок длиной не менее 10 символов, которые начинаются буквой A, заканчиваются буквой D и не содержат других букв A и D, кроме первой и последней.

Решение №1

f = open(’24.txt’)
s = f.readline()
ans = 0
for i in range(len(s)):
    if s[i] == ’A’: #Возможно, здесь начинается нужная подстрока
        for j in range(i + 1, len(s)): #Запускаем цикл со следующего элемента
            if s[j] == ’A’: #Если попали на вторую букву А, то подстрока нам не подходит
                break
            if s[j] == ’D’: #Если попали на букву D
                if (j - i + 1) >= 10: #Если длина подстроки больше 10
                    ans += 1 #Нашли подходящую подстроку, увеличиваем счётчик
                break #Либо нашли подходящую подстроку, либо длина меньше 10 и мы её пропускаем
print(ans)

Решение №2

f = open(’24.txt’)
s = f.readline()
k = 0
for i in range(len(s) - 9): #Изменили длину цикла
    if s[i] == ’A’:
        for n in range(9, len(s)): #Подходящая последовательность может быть при n = 9. Длина подстроки, заключённой
                                #между эл-тами s[0] и s[9] равна 9 - 0 + 1 = 10 >= 10.
            if s[i + n] == ’D’:
                b = s[i:i + n + 1]
                if b.count(’A’) == 1 and b.count(’D’) == 1:
                    k += 1
                    print(b)
                else: #Если условие выше не выполнилось, то в текущей подстроке уже несколько букв A или D, которые,
                    #очевидно, останутся в подстроке, даже если мы сдвинем её правую границу (n)
                    break #Прерываем цикл с такой подстрокой
print(k)

Ответ: 76
Оцените статью
Я решу все!