Skip to content

Instantly share code, notes, and snippets.

@unilecs
Created November 2, 2017 14:34
Show Gist options
  • Save unilecs/cf57b6a849d983bbf6dc79587d66ff44 to your computer and use it in GitHub Desktop.
Save unilecs/cf57b6a849d983bbf6dc79587d66ff44 to your computer and use it in GitHub Desktop.
Баланс скобок
using System;
using System.Collections.Generic;
public class Program
{
public static bool ComplexBracketsBalance(string input)
{
Stack<char> symbolStack = new Stack<char>();
foreach (char symbol in input)
{
// Если открывающая скобка - записываем символ скобки в стек
if (symbol == '{' || symbol == '(')
{
symbolStack.Push(symbol);
}
// Если закрывающа скобка
if (symbol == '}' || symbol == ')')
{
// если стек не пуст
if (symbolStack.Count > 0)
{
char lastSymbol = symbolStack.Peek(); // символ из вершины стека
// закрывающая скобка должна быть такого же типа как последняя открывающая
// иначе в стеке останется символ
if (symbol == '}' && lastSymbol == '{' || symbol == ')' && lastSymbol == '(')
{
symbolStack.Pop();
}
}
else
{
// Встретили закрывающую скобку, но не было открывающей
return false;
}
}
}
// Если стек не пустой, значит порядок скобок был нарушен
return symbolStack.Count == 0;
}
public static void Main()
{
Console.WriteLine("UniLecs");
Console.WriteLine(ComplexBracketsBalance("({(){}()})()")); // true
Console.WriteLine(ComplexBracketsBalance("({(}){})")); // false
Console.WriteLine(ComplexBracketsBalance("")); // true
Console.WriteLine(ComplexBracketsBalance("test")); // true
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment