Используя стек, проверить, является ли правильной скобочная последовательность - C#

Узнай цену своей работы

Формулировка задачи:

Используя стек, проверить, является ли правильной скобочная последовательность, в которую входят скобки трех типов: , { }, . Формат входных данных Входной файл состоит из одной строки, представляющей собой последовательность скобок без пробелов. Формат выходных данных Выведите в выходной файл yes , если скобочная последовательность правильная или no в противном случае. Примеры: Вход ()({[]()}[]) Выход Yes Вход ([)] Выход No Вход ([()] Выход No

Решение задачи: «Используя стек, проверить, является ли правильной скобочная последовательность»

textual
Листинг программы
  1. void Main()
  2. {
  3.     var s = "()({[]()}[])";
  4.     var checker = new BracketsChecker();
  5.    
  6.     foreach (var ch in s)
  7.         checker.Put(ch);
  8.    
  9.     Console.WriteLine(checker.Balanced);
  10. }
  11.  
  12. class BracketsChecker
  13. {
  14.     private readonly string _opening = "([{";
  15.     private readonly string _closing = ")]}";
  16.    
  17.     private bool _cantBeBalanced;
  18.    
  19.     private Stack<int> _opened = new Stack<int>();
  20.    
  21.     public bool Balanced => !_cantBeBalanced && !_opened.Any();
  22.    
  23.     public void Put(char ch)
  24.     {
  25.         if (_cantBeBalanced) return;
  26.        
  27.         int index = _opening.IndexOf(ch);
  28.        
  29.         if (index != -1)
  30.         {
  31.             _opened.Push(index);
  32.             return;
  33.         }
  34.        
  35.         index = _closing.IndexOf(ch);
  36.  
  37.         if (index != -1)
  38.         {
  39.             if (!_opened.Any() || _opened.Peek() != index)
  40.             {
  41.                 _cantBeBalanced = true;
  42.                 _opened.Clear();
  43.                 _opened.TrimExcess();
  44.                 return;
  45.             }
  46.            
  47.             _opened.Pop();
  48.             return;
  49.         }
  50.     }
  51. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.286 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы