Используя стек, проверить, является ли правильной скобочная последовательность - 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;
        }
    }
}

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


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

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

7   голосов , оценка 4.286 из 5
Похожие ответы