Тёмный

Собеседование C# - Задача на баланс скобок | Хеллоуиновский выпуск 

Platinum DEV
Подписаться 8 тыс.
Просмотров 9 тыс.
50% 1

Что может быть страшнее на собеседовании, чем не ответить на вопрос? Особенно на первый... Мы записали небольшую сценку с тем как это могло бы выглядеть, а также последующий разбор задачи на проверку баланса скобок, чтобы при случае, на собеседовании такой ситуации не произошло :) Приятного просмотра!!
Мы в Telegram: t.me/platinum_tech_talks
Чат для общения и вопросов: t.me/platinum_chat
Лицензия Creative Commons Attribution 4.0 на использование трека Cartoon (Sting) (исполнитель: Twin Musicom): creativecommons.org/licenses/...

Опубликовано:

 

29 окт 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 56   
@_superbeller_
@_superbeller_ 2 года назад
Можно ещё ввести три счетчика (по одному на каждый вид скобок). И дальше идти по строке. Если скобка открывающая, то делаем +1, если закрывающая, то -1. Если хотя бы один счётчик уходит в минус по мере прохождения строки, то выходим из метода с false. После прохождения строки проверяем все счётчики на 0 и возвращаем true/false (true, если все три счётчика по нулям).
@shatalinator
@shatalinator Год назад
Ваш вариант лучше при озвученных в видео условиях: скобки бывают разные и количество открывающих/закрывающих должно быть одинаковым. Но ещё одно не озвученное условие - нужно ещё учитывать правильную вложенность, например, такая последовательность () правильная,а такая ( нет.
@konstantink2396
@konstantink2396 2 года назад
Сегодня наткнулся на канал, приятно слушать автора, курс по вебапи вообще топ в актуальности технологий, но хотелось бы побольше роликов и пообширней курс. Автору привет и респект)
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Спасибо большое, Константин!!!
@velfex
@velfex 2 года назад
Спасибо за видео подобного рода, жду еще больше подобного контента, потому что в сети не так уж и много подобных разборов задач. Или я плохо искал :)
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Спасибо вам большое за поддержку.да, планируются разборы вопросов/задач с собеседований.может не часто, но в планах есть
@ivansamohvalov440
@ivansamohvalov440 2 года назад
Храни господь ваш канал
@iharshyrynkou1834
@iharshyrynkou1834 2 года назад
Поддерживаю
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
спасибо вам! :)
@IvanenkoStepan
@IvanenkoStepan 2 года назад
Молодцы! Креативненько
@MrCommanderKid
@MrCommanderKid 2 года назад
Через рекурсию делал, но там можно разочароваться в жизни и даже в програмировании. А тут бодрячком все вышло или вошло... 😁
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
да.. разочаровываться ни в чем не нужно! только вперед! :) спасибо!
@phat80
@phat80 2 года назад
Я бы скорее всего при таком вопросе выделил из текста все скобки и последовательно поместил бы их в динамический массив. Сначала проверил бы массив на четность количества элементов. Если количество элементов не четное, то уже можно ничего не проверять. Далее скорее всего стал бы думать в сторону бинарного дерева и проверил бы это дерево на то, чтобы все левые элементы были открывающими, а все правые закрывающими, и чтобы виды этих скобок совпадали. Видимо я склонен все чрезмерно усложнять 🙄
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
очень интересный подход!
@Eric-iz8fu
@Eric-iz8fu 2 года назад
Только виды а начала отсеешь), вот четное не корректное (]
@eugenesukharev5871
@eugenesukharev5871 2 года назад
А точно, принимая пустую строку, метод IsBalanced должен возвращать false? В пустой строке нет неправильных скобок
@Awbool
@Awbool 2 года назад
Ааааа... у меня пару часов назад спрашивали на собесе про баланс скобок :)
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
😅 вам удалось справиться с задачей?
@Awbool
@Awbool 2 года назад
@@PlatinumTechTalks ага, даже решение написал
@user-jk8cy1yt7p
@user-jk8cy1yt7p 2 года назад
Какой шрифт в вашей визуал студио?
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
в данном видео это не Visual Studio. тут используется Rider. Но шрифт и там и там один и тот же - специально разработанный компанией JetBrains для чтения кода шрифт. можно забирать бесплатно на их официальном сайте
@bookuha
@bookuha 2 года назад
Делал такое же задание в универе. Точно таким образом
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Круто! Это было требуемое решение в рамках задания или одно из возможных?
@bookuha
@bookuha 2 года назад
@@PlatinumTechTalks Одно из возможных =)
@user-bi4zw1hw2s
@user-bi4zw1hw2s Год назад
Решал иным способом: проверял, можно ли удалить подстроки () или {} или [], если строка опустела, значит скобки корректны
@SergFreest
@SergFreest Год назад
ага и че это по сложности?
@Mr43046721
@Mr43046721 2 года назад
Я бы сделал решение этой задачи просто банальным подсчетом открывающих и закрывающих скобок для каждого их типа. Если число открытых и закрытых скобок равны, значит, всё гуд. Но я не претендую на истину, но ваше решение лично мне показалось не совсем читабельным)
@nataliatsvilikh5884
@nataliatsvilikh5884 2 года назад
не учитывается правильная вложенность
@phat80
@phat80 2 года назад
Ну тогда даже такой простейший вариант успешно пройдет тестирование - “)(“. Тут есть и открывающая и закрывающая скобка и их количество равно, не так ли? )))
@Mr43046721
@Mr43046721 2 года назад
@@phat80 а решение автора не пропустит этот кейс?)
@crabby3936
@crabby3936 2 года назад
@@Mr43046721 на 40 строке вернёт false (увидели закрывающую скобку, а стек пуст)
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
часто когда спрашивают эту задачу на собеседовании - то хотят посмотреть не только как человек мыслит при решении задач, но и умеет ли пользоваться стеком. но конечно можно реализовывать как душе угодно ))
@viktorandrusenko6467
@viktorandrusenko6467 2 года назад
У меня была такая задача в лабораторной по алгоритмам :)
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Здорово! Как решали?)
@nataliatsvilikh5884
@nataliatsvilikh5884 2 года назад
я бы сказала что пустая строка - сбалансирована - true
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
похоже придется перезаписывать)) но вообще да, в идеале конечно это стоит уточнять у тех, кто спрашивает - какие требования они предъявляют и что по их мнению такое этот баланс. стоило упомянуть в видео
@GUTAPUCT
@GUTAPUCT 2 года назад
не хватает только примера типа "(mother{father)}" - should be false
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Хорошо хоть само решение не пропустили)
@user-hq1on1wb1f
@user-hq1on1wb1f 2 года назад
Я зробив би по іншому, у першу чергу у методі створив char масив у якому знаходяться можливі скобки далі почав цикл у ньому створив 2 цілочисленні змінні 1 рахувалаб кількість відкриваючих скобок а друга закриваючи через функцію Count() далі умова якщо count1 + count2 % 2 != 0 тоді функція повертає false інакше цикл повторюєтся коли цикл закінчився функція повертає true.
@rogiawos8737
@rogiawos8737 Год назад
LeetCode 20. Valid Parentheses
@rogiawos8737
@rogiawos8737 Год назад
стандартное решение 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;
@IvanenkoStepan
@IvanenkoStepan 2 года назад
Решение для одного вида скобок. Для нескольких видов скобок решение аналогичное. Давайте посоревнуемся, кто напишет самое быстрое решение ;) 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; }
@rustamboranov868
@rustamboranov868 2 года назад
Не проверяется правильная очередность в случае нескольких видов скобок
@rogiawos8737
@rogiawos8737 Год назад
@@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;
@rogiawos8737
@rogiawos8737 Год назад
хотя оно не сработает на таком тесте "([)]"
@denisosipenko7413
@denisosipenko7413 2 года назад
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; } Я так это делал.
@cockswell9076
@cockswell9076 2 года назад
Не проще 2 интовые пересенные сделать. И в конце сравнить значения
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
это как?
@leobreydo9318
@leobreydo9318 Год назад
Здесь не нужен ни стек ни словарь. Сомнительное решение.
@user-ec4mt4wy1i
@user-ec4mt4wy1i 2 года назад
решение моё такое себе, но оно работает)) 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) :=)
@Saveaaa
@Saveaaa 2 года назад
IsBalanced звучит как переменная , а не как метод.
@PlatinumTechTalks
@PlatinumTechTalks 2 года назад
Вы правы...
@user-ix9vk5if5b
@user-ix9vk5if5b 3 месяца назад
поставил на паузу и решил по другому 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); }
@SergFreest
@SergFreest Год назад
конечно стек, тут и думать нечего
Далее
▼КОРОЛЬ СОЖРАЛ ВСЕХ 👑🍗
29:48
Просмотров 358 тыс.
Что нового в C# 12
22:36
Просмотров 4,2 тыс.
▼КОРОЛЬ СОЖРАЛ ВСЕХ 👑🍗
29:48
Просмотров 358 тыс.