📅  最后修改于: 2023-12-03 15:36:38.956000             🧑  作者: Mango
在编程中,括号匹配是一个基本且常见的问题。C# 中可以通过堆栈来检查表达式中的平衡括号。一个表达式中的平衡括号指的是每个左括号都有右括号匹配,并且左右括号的数量相等。
对于表达式中的每个字符:
(
、{
、[
)之一,则将其推入堆栈。)
、}
、]
)之一,则从堆栈中弹出一个元素并检查是否与该右括号匹配。如果出现任何不匹配的情况,表达式中的括号就不是平衡的。
public static bool IsBalanced(string expression)
{
Stack<char> stack = new Stack<char>();
foreach (char c in expression)
{
if (c == '(' || c == '[' || c == '{')
{
stack.Push(c);
}
else if (c == ')' || c == ']' || c == '}')
{
if (stack.Count == 0)
{
return false;
}
char top = stack.Pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{'))
{
return false;
}
}
}
return stack.Count == 0;
}
string expression1 = "(6+2)*(8-3)";
Console.WriteLine(IsBalanced(expression1)); // 输出:True
string expression2 = "((2+5)*((3-2)+(2*2)))";
Console.WriteLine(IsBalanced(expression2)); // 输出:True
string expression3 = "[{()}]";
Console.WriteLine(IsBalanced(expression3)); // 输出:True
string expression4 = "(()]";
Console.WriteLine(IsBalanced(expression4)); // 输出:False
string expression5 = "(((())()";
Console.WriteLine(IsBalanced(expression5)); // 输出:False
使用堆栈检查表达式中的平衡括号是很常见的问题,实现思路也比较简单。在编写代码时,需要注意边界情况,比如表达式中没有左括号但有右括号的情况,或者堆栈中没有元素却还有右括号的情况。