Как определить максимальную глубину вложенности скобок
Перейти к содержимому

Как определить максимальную глубину вложенности скобок

Найти максимальную глубину вложенных скобок в строке

Нам дают строку с круглыми скобками, как показано ниже
«(((X)) (((Y))))»
Нам нужно найти максимальную глубину сбалансированных скобок, как 4 в приведенном выше примере. Так как 'Y' окружено 4 сбалансированными скобками.

Если круглые скобки не сбалансированы, верните -1.

Примеры :

Метод 1 (использует стек)
Простым решением является использование стека, который отслеживает текущие открытые скобки.

Сложность времени: O (n)
Вспомогательное пространство: O (n)

Метод 2 (O (1) вспомогательное пространство)
Это также можно сделать без использования стека.

Ниже приведена реализация вышеуказанного алгоритма.

// Программа на C ++ для определения максимальной глубины вложенности
// скобки в данном выражении
#include <iostream>

using namespace std;

// функция берет строку и возвращает
// максимальная глубина вложенных скобок

int maxDepth(string S)

int current_max = 0; // текущий счет

int max = 0; // общее максимальное количество

// Обход строки ввода

for ( int i = 0; i< n; i++)

// обновить макс при необходимости

if (current_max> max)

// наконец проверяем несбалансированную строку

if (current_max != 0)

// Java программа для поиска максимальной глубины вложенности
// скобки в данном выражении

// функция берет строку и возвращает
// максимальная глубина вложенных скобок

static int maxDepth(String S) <

int current_max = 0 ; // текущий счет

int max = 0 ; // общее максимальное количество

// Обход строки ввода

for ( int i = 0 ; i < n; i++) <

// обновить макс при необходимости

if (current_max > max) <

if (current_max > 0 ) <

// наконец проверяем несбалансированную строку

if (current_max != 0 ) <

public static void main(String[] args) <

# Программа Python, чтобы найти максимальную глубину вложенности
# скобки в данном выражении

Функция # принимает строку и возвращает
# максимальная глубина вложенных скобок

# Пройти строку ввода

for i in xrange (n):

if current_max > max :

if current_max > 0 :

# наконец, проверьте несбалансированную строку

if current_max ! = 0 :

# Этот код предоставлен BHAVYA JAIN

<?php
// PHP программа для поиска
// максимальная глубина вложенности
// скобки в данном
// выражение

// функция принимает строку
// и возвращает максимум
// глубина вложенных скобок

function maxDepth( $S )

// общее максимальное количество

// Обход строки ввода

for ( $i = 0; $i < $n ; $i ++)

// обновить макс при необходимости

if ( $current_max > $max )

if ( $current_max >0)

if ( $current_max != 0)

echo maxDepth( $s );

// Этот код предоставлен mits
?>

Выход :

Сложность времени: O (n)
Вспомогательное пространство: O (1)

Эта статья предоставлена Гауравом Шармой . Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Найдите максимальную глубину вложенных скобок в строке R-кода

У меня проблема с завершением этого кода R. Нам дается строка со скобками, как показано ниже «(((X)) (((Y))))» Нам нужно найти максимальную глубину сбалансированной скобки, например 4 в примере выше. Поскольку «Y» заключен в 4 сбалансированные круглые скобки.

Если круглые скобки неуравновешены, верните -1 Мой код выглядит так:

но когда я вызываю функцию def («(A ((B)))»), ответ должен быть 2. Но каждый раз он показывает 0, даже когда круглые скобки неуравновешены. Я не уверен, правильный ли код или где ошибка. Я пытаюсь выучить R, так что проявите ко мне терпение. Спасибо

Я не думаю, что is.element(‘(‘,n[i]) делает то, что вы думаете! Вам наверное нужен substr(n,i,i)==»(«

Итак, наконец, я закончил код. Теперь он показывает, сбалансированы ли скобки или нет. Если он сбалансирован, он показывает максимальную скобку, если он несбалансирован, он показывает -1. Спасибо всем за большую помощь. Я очень ценю это. Вот окончательный код для всех, кому нужно будет решить эту проблему: sample = function(z) < y = match( strsplit(z, "")[[1]], c("(", ")"), 0 ) m <- max(cumsum( c(1, -1)[y] )) if((min(cumsum( c(1, -1)[y] ))<0)||(sum( c(1, -1)[y])!=0)) < print(-1) >else < print(m) >> Просто назовите его как sample(«(A((B)))»)

@Filip Pittner, sample(«abc») должен быть 0, но дает другой ответ и несколько предупреждений.

Формы c голосовым вводом в React с помощью Speechly

Flatpickr: простой модуль календаря для вашего приложения на React

Что такое cURL в PHP? Встроенные функции и пример GET запроса

Ответы 2

Если x <- «( ((X)) (((Y))) )» , то удалите все скобки и разделите на символы .

а затем максимальное вложение — это наибольшая совокупная сумма +1 (для ( ) и -1 (для ) ) .

Если круглые скобки не сбалансированы, то sum(ifelse(y==»(«, 1, -1))) не будет равен нулю.

Связанная идея состояла бы в том, чтобы сопоставить отдельные символы с ( и ) с y = match( strsplit(x, «»)[[1]], c(«(«, «)»), 0 ) , затем перекодировать и суммировать max(cumsum( c(1, -1)[y] )) .

Я пробовал, но когда скобка неуравновешена, она показывает мне первую сбалансированную скобку. Как (A) (B)) показывает 1, но он должен показать -1, поскольку B не сбалансирован. Я включил его в функцию, чтобы я мог легко называть его sample = function(z)

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

1) strapply / proto strapply в пакетах gsubfn соответствует регулярному выражению, указанному в качестве второго аргумента, запускающего функцию fun в прото-объекте p , который также должен быть передан в strapply . Функция pre в p инициализирует вычисление для каждого компонента входного x . Прото-объект можно использовать для сохранения памяти о прошлых совпадениях (здесь lev — уровень вложенности), позволяя производить подсчет. Мы добавляем произвольный символ, здесь «X» , к каждой строке, чтобы всегда было хотя бы одно совпадение. Если бы мы знали, что вводимых строк символов нулевой длины нет, это можно было бы опустить. sapply использует Max , который берет максимум из возвращенных глубин или возвращает -1, если баланс отсутствует.

2) Уменьшить Это базовое решение. Он использует Max из (1).

3) strapply / list (ремешок / список) Другая возможность — извлечь круглые скобки и вернуть +1 или -1 для ( и ) , используя strapply со списком замен. Затем запустите cumsum и Max (сверху) поверх этого.

Это тоже хорошо, но недостаточно. Если скобка не сбалансирована, возникает проблема. Как и (A) ((B) или (A (B))), он должен вывести -1, но он будет печатать первую правильную круглую скобку, даже если она не сбалансирована

Это просто вопрос замены max на функцию Max , которая возвращает максимум или -1 в зависимости от того, есть баланс или нет. Сделали это изменение.

Как определить максимальную глубину вложенности скобок

Relan, насколько я понял человеку надо выделить именно самые вложенные скобки(и их содержимое), а не глубину, на котрой они находятся.
То есть что-то типа того:

Добавлено 20.02.05, 12:05
Relan, твой код только проверяет на парность скобок. Т.е. если все скобки парные, твой код вернет 0

mikv, он хотел определить именно глубину вложенности. Посмотри на вопрос

Добавлено 20.02.05, 12:08

Если мой подойдет, то алгоритм прост до безобразия, это одна из самых простых задач на рекурсию. Мы идем по открытым скобкам и считаем их, пока не дойдем до закрывающейся. Когда мы до нее доходим, то максимальная глубина вложенности скобок будет определяться максимумом двух значений: а) текущим значением открытых скобок б) текущим значением открытых скобок минус 1 (вследствие того, что мы встретили закрывающуюся скобку) плюс количество открывающихся скобок после найденной нами закрывающейся. Вот так вот.

Добавлено 20.02.05, 12:10
зы. млин, и как все-таки галимо выглядит рекурсия в сях

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *