Используя стек, проверить, является ли правильной скобочная последовательность - 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; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д