Created
November 2, 2017 14:34
-
-
Save unilecs/cf57b6a849d983bbf6dc79587d66ff44 to your computer and use it in GitHub Desktop.
Баланс скобок
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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