题目:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
- 示例 1:
输入: “()”
输出: true - 示例 2:
输入: “()[]{}”
输出: true - 示例 3:
输入: “(]”
输出: false - 示例 4:
输入: “([)]”
输出: false - 示例 5:
输入: “{[]}”
输出: true
代码:
Stack<Char> stack = new Stack<Char>();
int n = s.Length;
if(n == 0)
return true;
else if(s[0] == ')' || s[0] =='}' || s[0] == ']')
return false;
else if(n%2 == 1)
return false;
else
foreach(var i in s)
{
if(i == '(' || i == '[' || i == '{')
{
stack.Push(i);
}
else if(i == ')')
{
if(stack.Pop() != '(' )
return false;
}
else if(i == '}')
{
if(stack.Pop() != '{' )
return false;
}
else if(i == ']')
{
if(stack.Pop() != '[' )
return false;
}
}
return stack.Count == 0;
}
解析:
此前向后逐个遍历,考虑到每一种情况,用判断语句来分辨是否有效,最后返回战,若栈为0,则 return ture