Можно ещё ввести три счетчика (по одному на каждый вид скобок). И дальше идти по строке. Если скобка открывающая, то делаем +1, если закрывающая, то -1. Если хотя бы один счётчик уходит в минус по мере прохождения строки, то выходим из метода с false. После прохождения строки проверяем все счётчики на 0 и возвращаем true/false (true, если все три счётчика по нулям).
@shatalinator Жыл бұрын
Ваш вариант лучше при озвученных в видео условиях: скобки бывают разные и количество открывающих/закрывающих должно быть одинаковым. Но ещё одно не озвученное условие - нужно ещё учитывать правильную вложенность, например, такая последовательность () правильная,а такая ( нет.
@konstantink23963 жыл бұрын
Сегодня наткнулся на канал, приятно слушать автора, курс по вебапи вообще топ в актуальности технологий, но хотелось бы побольше роликов и пообширней курс. Автору привет и респект)
@PlatinumTechTalks3 жыл бұрын
Спасибо большое, Константин!!!
@ivansamohvalov4403 жыл бұрын
Храни господь ваш канал
@OlegMongol186753 жыл бұрын
Поддерживаю
@PlatinumTechTalks3 жыл бұрын
спасибо вам! :)
@velfex3 жыл бұрын
Спасибо за видео подобного рода, жду еще больше подобного контента, потому что в сети не так уж и много подобных разборов задач. Или я плохо искал :)
@PlatinumTechTalks3 жыл бұрын
Спасибо вам большое за поддержку.да, планируются разборы вопросов/задач с собеседований.может не часто, но в планах есть
@phat803 жыл бұрын
Я бы скорее всего при таком вопросе выделил из текста все скобки и последовательно поместил бы их в динамический массив. Сначала проверил бы массив на четность количества элементов. Если количество элементов не четное, то уже можно ничего не проверять. Далее скорее всего стал бы думать в сторону бинарного дерева и проверил бы это дерево на то, чтобы все левые элементы были открывающими, а все правые закрывающими, и чтобы виды этих скобок совпадали. Видимо я склонен все чрезмерно усложнять 🙄
@PlatinumTechTalks3 жыл бұрын
очень интересный подход!
@Eric-iz8fu2 жыл бұрын
Только виды а начала отсеешь), вот четное не корректное (]
@MrCommanderKid3 жыл бұрын
Через рекурсию делал, но там можно разочароваться в жизни и даже в програмировании. А тут бодрячком все вышло или вошло... 😁
@PlatinumTechTalks3 жыл бұрын
да.. разочаровываться ни в чем не нужно! только вперед! :) спасибо!
@eugenesukharev58713 жыл бұрын
А точно, принимая пустую строку, метод IsBalanced должен возвращать false? В пустой строке нет неправильных скобок
@IvanenkoStepan3 жыл бұрын
Молодцы! Креативненько
@Mr430467213 жыл бұрын
Я бы сделал решение этой задачи просто банальным подсчетом открывающих и закрывающих скобок для каждого их типа. Если число открытых и закрытых скобок равны, значит, всё гуд. Но я не претендую на истину, но ваше решение лично мне показалось не совсем читабельным)
@nataliatsvilikh58843 жыл бұрын
не учитывается правильная вложенность
@phat803 жыл бұрын
Ну тогда даже такой простейший вариант успешно пройдет тестирование - “)(“. Тут есть и открывающая и закрывающая скобка и их количество равно, не так ли? )))
@Mr430467213 жыл бұрын
@@phat80 а решение автора не пропустит этот кейс?)
@crabby39363 жыл бұрын
@@Mr43046721 на 40 строке вернёт false (увидели закрывающую скобку, а стек пуст)
@PlatinumTechTalks3 жыл бұрын
часто когда спрашивают эту задачу на собеседовании - то хотят посмотреть не только как человек мыслит при решении задач, но и умеет ли пользоваться стеком. но конечно можно реализовывать как душе угодно ))
@Awbool3 жыл бұрын
Ааааа... у меня пару часов назад спрашивали на собесе про баланс скобок :)
@PlatinumTechTalks3 жыл бұрын
😅 вам удалось справиться с задачей?
@Awbool3 жыл бұрын
@@PlatinumTechTalks ага, даже решение написал
@GUTAPUCT3 жыл бұрын
не хватает только примера типа "(mother{father)}" - should be false
@PlatinumTechTalks3 жыл бұрын
Хорошо хоть само решение не пропустили)
@nataliatsvilikh58843 жыл бұрын
я бы сказала что пустая строка - сбалансирована - true
@PlatinumTechTalks3 жыл бұрын
похоже придется перезаписывать)) но вообще да, в идеале конечно это стоит уточнять у тех, кто спрашивает - какие требования они предъявляют и что по их мнению такое этот баланс. стоило упомянуть в видео
@bookuha3 жыл бұрын
Делал такое же задание в универе. Точно таким образом
@PlatinumTechTalks3 жыл бұрын
Круто! Это было требуемое решение в рамках задания или одно из возможных?
@bookuha3 жыл бұрын
@@PlatinumTechTalks Одно из возможных =)
@Alexvilg2 жыл бұрын
Решал иным способом: проверял, можно ли удалить подстроки () или {} или [], если строка опустела, значит скобки корректны
@SergFreest2 жыл бұрын
ага и че это по сложности?
@Мудрыйлол3 жыл бұрын
Какой шрифт в вашей визуал студио?
@PlatinumTechTalks3 жыл бұрын
в данном видео это не Visual Studio. тут используется Rider. Но шрифт и там и там один и тот же - специально разработанный компанией JetBrains для чтения кода шрифт. можно забирать бесплатно на их официальном сайте
@IvanenkoStepan3 жыл бұрын
Решение для одного вида скобок. Для нескольких видов скобок решение аналогичное. Давайте посоревнуемся, кто напишет самое быстрое решение ;) public bool IsBalancedBrakers(string text) { if (text == null) throw new ArgumentNullException(); if (text == string.Empty) return true; int count = 0; for (int i = 0; i < text.Length; i++) { if (text[i] == '(') count++; else if (text[i] == ')') { if (count < 1) return false; count--; } } if (count != 0) return false; return true; }
@rustamboranov8683 жыл бұрын
Не проверяется правильная очередность в случае нескольких видов скобок
@rogiawos87372 жыл бұрын
@@rustamboranov868 проверяется вот полное решение var counter1 = 0; var counter2 = 0; var counter3 = 0; for (int i = 0; i < text.Length; i++) { if (!_symbols.ContainsKey(text[i])) continue; switch (text[i]) { case '{': counter1++; break; case '}': counter1--;break; case '[': counter2++;break; case ']': counter2--;break; case '(': counter3++;break; case ')': counter3--;break; } //если закрывающая пришла раньше открывающей if (new[]{counter1,counter2,counter3}.Any(v=>v v != 0)) { return false; } return true;
@rogiawos87372 жыл бұрын
хотя оно не сработает на таком тесте "([)]"
@rogiawos87372 жыл бұрын
LeetCode 20. Valid Parentheses
@rogiawos87372 жыл бұрын
стандартное решение if (s.Length == 0 || s.Length % 2 != 0) return false; var dict = new Dictionary(3); dict.Add('{','}'); dict.Add('[',']'); dict.Add('(',')'); var stack = new Stack(); for (int i = 0; i < s.Length; i++) { if (dict.ContainsKey(s[i])) { stack.Push(s[i]); } else { if (stack.Count == 0 || dict[stack.Pop()]!=s[i]) { return false; } } } return stack.Count ==0;
@МиколаМельник-ж1м2 жыл бұрын
Я зробив би по іншому, у першу чергу у методі створив char масив у якому знаходяться можливі скобки далі почав цикл у ньому створив 2 цілочисленні змінні 1 рахувалаб кількість відкриваючих скобок а друга закриваючи через функцію Count() далі умова якщо count1 + count2 % 2 != 0 тоді функція повертає false інакше цикл повторюєтся коли цикл закінчився функція повертає true.
@viktorandrusenko64672 жыл бұрын
У меня была такая задача в лабораторной по алгоритмам :)
@PlatinumTechTalks2 жыл бұрын
Здорово! Как решали?)
@leobreydo9318 Жыл бұрын
Здесь не нужен ни стек ни словарь. Сомнительное решение.
@denisosipenko74132 жыл бұрын
var bracketsDic = new Dictionary(){ {'(', ')'}, {'[', ']'}, {'{', '}'}, {''}, }; bool IsBracketsBallanced(string plainText) { if (plainText is null or "") return false; var stack = new Stack(); plainText.ToList().ForEach(symbol => { if (bracketsDic.TryGetValue(symbol, out var bracket)) stack.Push(bracket); if (stack.Peek() == symbol) stack.Pop(); } ); return stack.Count == 0; } Я так это делал.
@ИльяКурашов-г7ж3 жыл бұрын
решение моё такое себе, но оно работает)) public static bool IsBalanced(string str) { string[] bracketTypes = { "{}", "[]", "()" }; str = Regex.Replace(str, @"[^{}\[\]\(\)]", ""); while (true) { int strLength = str.Length; foreach (string bracketTyte in bracketTypes) str = str.Replace(bracketTyte, ""); if (strLength == str.Length) if (str == "") return true; else return false; } } p.s. Ну непойму я прелестей работы со стеком и очередью(queue) :=)
@Saveaaa3 жыл бұрын
IsBalanced звучит как переменная , а не как метод.
@PlatinumTechTalks3 жыл бұрын
Вы правы...
@ЕвгенийИванов-я7и4м7 ай бұрын
поставил на паузу и решил по другому private static bool IsBalance(string text) { string stripeString = Regex.Replace(text, "[^\\(\\{\\[\\]\\}\\)]", ""); string testString = stripeString; string lastString = testString; do { lastString = testString; testString = Regex.Replace(testString, "\\[\\]", ""); testString = Regex.Replace(testString, "\\(\\)", ""); testString = Regex.Replace(testString, "\\{\\}", ""); } while (lastString != testString); return string.IsNullOrEmpty(testString); }