Если у меня есть строка длиной n
с открытыми (
и закрывающими )
круглыми скобками, и мне нужно посчитать, сколько раз я изменяю закрывающие )
круглые скобки, чтобы открывать (
каждый раз, когда у меня есть больше закрывающих скобок, чем открытых в текущий момент, при обходе слева направо в каждой подстроке этой строки.
Например: n = 3, s = ) ( )
:
все подстрока s будет [ ), ) (, ) ( ), (, ( ), ) ]
, которую мы будем считать во всей подстроке, как в ) ( )
у нас есть close = 1 и open = 0, close> open, следовательно count +. Теперь текущая обработанная строка - ( ( )
, и больше ничего не нужно делать. Точно так же, когда мы сделаем это для всех подстрок, число будет 4.
Я написал код грубой силы. Я предполагаю, есть ли способ сделать это с помощью стека или динамического программирования c, чтобы сделать в O (N) или что-то в этом роде?
Моя грубая сила выглядит так: 1. Создайте каждую подстроку из данной строки , O (N ^ 2). 2. Итерация по одной подстроке за раз для подсчета изменений. O (n) Следовательно, общая сложность O (n ^ 3)