题目描述

解题
思路:
①利用栈先进后出的特点;
②从左往右遍历,若为左括号则入栈;
③若为右括号则与栈顶元素匹配,匹配则继续,不匹配则false
public bool IsValid(string s) {
Stack<char> Valid = new Stack<char>();
List<char> s1 = new List<char>(s);
Dictionary<char, char> Dr = new Dictionary<char, char> { {')','(' }, {'}','{' }, { ']','['} };
char[] l = new char[] {'[','{','(' };
if (s == ""){return true;}
for (int i = 0; i < s.Length; i++)
{
if (l.Contains(s1[i]))
{
Valid.Push(s1[i]);
}
else
{
if(Valid.Count == 0)
{//首字符为右括号 必不匹配
return false;
}
else if (Dr[s1[i]] != Valid.Pop())
{//不匹配
return false;
}
}
}
if (Valid.Count!=0)
{ //遍历完后 栈内还有字符 说明不完全匹配
return false;
}
return true;
}
注意特殊情况:
①输入s为空;
②首字符为右括号;
③左括号多余;
④右括号多余。

本文深入探讨了使用栈实现括号匹配的有效算法。通过详细解释算法步骤,包括左括号入栈、右括号与栈顶元素匹配的过程,以及如何处理特殊情况如空字符串、首字符为右括号等,为读者提供了全面的理解。文章还提供了完整的代码示例,帮助读者快速掌握括号匹配算法的实现。
873

被折叠的 条评论
为什么被折叠?



