题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
解题思路(栈):
本题是用栈的思想去完成,但凡是(,{,[这样的符号都压入栈中,如果有),},]这样的字符就去栈顶返回元素与之相匹配,匹配就继续遍历,不匹配就返回false,一直到字符串遍历完
源代码
public bool IsValid(string s)
{
//如果字符串长度为0,按照题目要求也应该返回正确的
if (s.Length == 0)
return true;
//定义一个存放字符的栈
Stack<char> stack = new Stack<char>();
//遍历每个字符
foreach(char ch in s)
{
if (ch == '(' || ch == '{' || ch == '[')
stack.Push(ch); //在顶部插入该元素
else
{
//如果是)、}、】,而且栈里面没有数据那么就返回错误
if (stack.Count == 0)
return false;
else
{
//如果返回的元素无法与括号相匹配就返回错误
char temp = stack.Pop();
if (ch == ')')
if (temp != '(')
return false;
if (ch == '}')
if (temp != '{')
return false;
if (ch == ']')
if (temp != '[')
return false;
}
}
}
//如果字符串遍历完毕后,并且栈为空就返回true,否则返回false
if (stack.Count == 0)
return true;
else
return false;
}