using System.Collections.Generic;
public static void Main()
var text1 = "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right)";
var text2 = "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x} &... x^2 \\end{array}\\right";
var text3 = "\\left(\\begin{array}{cc} \\frac{1}{3} & x\\\\ \\mathrm{e}^{x &... x^2 \\end{array}\\right)}";
Console.WriteLine(IsPaired(text1));
Console.WriteLine(IsPaired(text2));
Console.WriteLine(IsPaired(text3));
private static Dictionary<char, char> _pairs = new Dictionary<char, char>
public static bool IsPaired(string input)
if (input.Length == 0) { return true;}
Stack<char> brackets = new Stack<char>();
foreach (char i in input)
if(_pairs.ContainsKey(i)){
else if(_pairs.Values.Contains(i))
var openingBracket = brackets.Pop();
if(_pairs[openingBracket] != i)
return brackets.Count == 0;