判断括号的合法性
创建一个方法实现对括号合法性的判断
断定逻辑如下:
string str1 = "((([)"; //非法
string str2 = "{[()]}()"; //合法
只有一种括号
如果字符串中仅包含一种括号,想让字符串合法,就必须要做到,每一个 “(”,都有一 “)” 与之对应。且"("必须在“)”左侧。
C#实现代码如下:
public static bool IsValidBracket(string str)
{
int flag = 0;
for (int i = 0; i < str.Length; i++)
{
if (str[i] == '(')
{
flag++;
}
else if (str[i] == ')')
{
flag--;
}
if (flag < 0)
return false;
}
return flag == 0 ;
}
包含多种括号
如果包含多种括号,就不能通过简单地创建一个标志位来实现了,因为“[ ( ] )”这种字符也不算是合法的。具体实现如下:
public static bool IsValidBracket(string str)
{
Stack<char> leftBracket = new Stack<char>();
for (int i = 0; i < str.Length; i++)
{
if (str[i] == '('|| str[i] == '['|| str[i] == '{')
{
leftBracket.Push(str[i]);
}
else if (str[i] == ')' || str[i] == ']' || str[i] == '}')
{
if (leftBracket.Peek() == GetAnthorBracket(str[i]) && leftBracket.Count != 0)
leftBracket.Pop();
else
return false;
}
}
return leftBracket.Count == 0;
}
private static char GetAntherBracket(char bra)
{
switch (bra)
{
case ')':return '(';
case ']':return '[';
case '}': return '{';
default:
return '0';
}
}