Оптимизация кода подсчета подстрок

Дана строка S из 2 6 N 6 200000 круглых скобок. Посчитайте количество подстрок S[i..j], 1 6 i < j 6 N, которые являются правильными скобочными выражениями. Скобочное выражение является правильным, если выполняются два условия: (i) при чтении слева направо количество закрывающих скобок никогда не превышает количество открывающих скобок; и (ii) во всем выражении количество открывающих и закрывающих скобок совпадает. Например, в строке S = ()(()) есть 4 подходящие подстроки:

Формат входных данных Строка из 2 6 N 6 200000 круглых скобок. Формат выходных данных Неотрицательное целое число

Мой код:

s = input()
s = [1 if i == '(' else -1 for i in list(s)]
cheked = set()
ans = 0
L = len(s)
for l in range(L+1 if L % 2 else L, 1, -2):
    for i in range(L-l+1):
        if (i, i+l-1) in cheked:
            continue
        sum = 0
        end = None
        for j in range(i, i+l):
            sum += s[j]
            if sum < 0:
                break
            if sum == 0:
                cheked.add((i, j))
                if end:
                    cheked.add((end+1, j))
                end = j

print(len(cheked))

Ответы (0 шт):