Используя стек, проверить, является ли правильной скобочная последовательность - C#
Формулировка задачи:
Используя стек, проверить, является ли правильной скобочная последовательность, в которую входят скобки трех типов: , { }, .
Формат входных данных
Входной файл состоит из одной строки, представляющей собой последовательность скобок без пробелов.
Формат выходных данных
Выведите в выходной файл yes , если скобочная последовательность правильная или no в противном случае.
Примеры:
Вход
()({[]()}[])
Выход
Yes
Вход
([)]
Выход
No
Вход
([()]
Выход
No
Решение задачи: «Используя стек, проверить, является ли правильной скобочная последовательность»
textual
Листинг программы
- void Main()
- {
- var s = "()({[]()}[])";
- var checker = new BracketsChecker();
- foreach (var ch in s)
- checker.Put(ch);
- Console.WriteLine(checker.Balanced);
- }
- class BracketsChecker
- {
- private readonly string _opening = "([{";
- private readonly string _closing = ")]}";
- private bool _cantBeBalanced;
- private Stack<int> _opened = new Stack<int>();
- public bool Balanced => !_cantBeBalanced && !_opened.Any();
- public void Put(char ch)
- {
- if (_cantBeBalanced) return;
- int index = _opening.IndexOf(ch);
- if (index != -1)
- {
- _opened.Push(index);
- return;
- }
- index = _closing.IndexOf(ch);
- if (index != -1)
- {
- if (!_opened.Any() || _opened.Peek() != index)
- {
- _cantBeBalanced = true;
- _opened.Clear();
- _opened.TrimExcess();
- return;
- }
- _opened.Pop();
- return;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д